在Heroku应用程序之间共享Python代码

时间:2013-01-10 08:52:53

标签: python git heroku

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

  1. 共享代码是版本化的(也就是说:它也位于Git中,我不在乎哪里 - 其中一个项目?另一个项目?)
  2. 在开发中,我的磁盘上有一份共享代码
  3. 在开发过程中,我可以更改共享代码的单个副本,并将更改反映在两个应用程序中,理想情况下,除了更改磁盘上的文件之外,不做任何其他操作。
  4. 当推到Heroku时,我所做的只是一个简单的“推动”
  5. 我的直觉告诉我,我需要将共享代码作为Python包,在磁盘上,并在开发中将其添加到每个应用程序的PYTHONPATH。 此外,我会添加它(如何使用私有服务器?从s3?作为供应商目录?)到每个应用程序的requriments.txt。

    ......但我无法确定它。

    有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以使用pip要求文件来执行此操作。您可以拥有一个用于本地开发,一个用于您的应用。有关详细信息,请查看the requirements file format

本地开发要求文件

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

这应该为您提供来自您应用的只读访问权限,这对共享代码(例如项目的git clone)非常有用。请注意,它将指向HEAD。这应符合要求1,2,3。

对于项目布局,您可以查看setuptools documentation;例如创建一个setup.py和一个包含代码的包。您可以查看requestsa good example

应用程序要求文件

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

这应该包含你推送到你的仓库的任何代码。我没有Heroku的经验,但如果they support requirements file that should just work。这应该符合要求1,我希望4。

如果你想使用heroku私人git repo,请refer to heroku documentation(请注意它是username:password基本身份验证和does not have email address)。如果您不想使用密码,可以使用revocable OAuth token

答案 1 :(得分:3)

您应该使用Git Submodule

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

答案 2 :(得分:1)

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

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