3

我有 2 个 Heroku 应用程序,包括 Pyhon,以及它们之间共享的一些 python 模块(即:它们在两个应用程序中是相同的)。设置我的 git / requirements.txt 以实现以下目标的最佳方法是什么?

  1. 共享代码是版本化的(也就是说:它也位于 Git 中,我不在乎在哪里——其中一个项目?另一个项目?)
  2. 在开发过程中,我的磁盘上有该共享代码的一个副本
  3. 在开发过程中,我可以更改共享代码的单个副本,并将更改反映在两个应用程序中,理想情况下,除了更改磁盘上的文件之外什么都不做。
  4. 推送到 Heroku 时,我所做的只是一个简单的“推送”

我的直觉告诉我,我需要将共享代码作为 Python 包保存在磁盘上,并在开发过程中将其添加到每个应用程序的 PYTHONPATH 中。此外,我会将它(如何?使用私人服务器?来自 s3?作为供应商目录?)添加到每个应用程序的 requriments.txt 中。

......但我不能完全确定它。

有什么想法吗?

4

3 回答 3

4

您可以使用pip需求文件来做到这一点。您可能有一个用于本地开发,一个用于您的应用程序。请查看要求文件格式以获取更多信息。

本地开发需求文件

file:///path/to/your/lib/project#egg=MyProject

这应该让您从您的应用程序获得只读访问权限,这对于共享代码(例如git clone项目)很有用。请注意,它将指向 HEAD。这应该符合要求 1、2、3。

对于项目布局,您可以查看setuptools 文档;例如,创建一个setup.py包含您的代码的包。你可以看看requests图书馆,这是一个很好的例子

应用需求文件

git://git.myproject.org/MyProject.git#egg=MyProject

这应该会获取您推送到您的仓库的任何代码。我没有使用 Heroku 的经验,但如果他们支持应该可以工作的需求文件。这应该符合要求 1,我希望符合要求 4。

如果您想在 heroku 中使用私有 git repo,请参考 heroku 文档(请注意,它是username:password基本身份验证,没有电子邮件地址)。如果您不想使用密码,可以使用可撤销的 OAuth 令牌

于 2013-01-18T00:08:50.433 回答
3

您应该使用Git Submodule

您在代码所在的位置创建一个项目,然后将对此的引用添加到您的两个 Heroku 应用程序中。

于 2013-01-10T09:18:19.637 回答
1

另一个想法是深入研究Git Subtree Merging

您可以将公共模块作为两个存储库中的分支,指向共同的来源。然后你可以把它放到你的项目文件夹中。

于 2013-01-19T07:38:45.700 回答