【问题标题】:Sharing Python code between Heroku apps在 Heroku 应用程序之间共享 Python 代码
【发布时间】:2012-12-24 14:31:57
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: python git heroku


    【解决方案1】:

    您可以使用pip 需求文件来执行此操作。您可能有一个用于本地开发,一个用于您的应用程序。请查看the requirements file format 了解更多信息。

    本地开发需求文件

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

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

    项目布局可以查看setuptools documentation;例如创建一个setup.py 和一个包含您的代码的包。您可以查看requests 库,即a 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:passwordbasic auth 和does not have email address)。如果您不想使用密码,可以使用revocable OAuth token

    【讨论】:

    • 能否请您添加 cmets/edits re: (1) 本地磁盘上的项目布局,处于开发模式? (我是否编辑“已安装”文件?更改后重新打包的过程是什么?)(2)如何设置存储库,这样我就不必在 requirements.txt 中的 URL 中有我的 github 凭据
    【解决方案2】:

    还有一个想法是挖掘Git Subtree Merging

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

    【讨论】:

      【解决方案3】:

      你应该使用Git Submodule

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

      【讨论】:

      • 据我所知,子模块 a 的问题在于它容易出错。我在网上看到很多批评。另外,它不满足我愿望清单上的第 2 点和第 3 点。如果没有其他方法可以使用它,我想,但我将首先检查每个选项,例如自定义脚本,例如。我的半生不熟的建议呢?好用吗?
      • 我发现它很有用。
      • Heroku 完全基于推送事件。这让我怀疑 Heroku 是否会检测并拉取子模块。如果没有,那么您所拥有的只是.gitmodules 中的一些无用引用。使用requirements.txt 是这里的方法。
      • "使用子模块的 GitHub 存储库通常不会在 Heroku 上正确部署。这是因为生成 repo-content tarball 时 GitHub 不包含子模块内容。" - 见devcenter.heroku.com/articles/github-integration#git-submodules
      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2017-07-27
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多