我正在将一个Python Django应用部署到Heroku,希望只在像Heroku这样的特定环境中自定义requirements.txt文件(通过添加带有密码的git后备依赖项)。我想将其设置为环境变量或其他形式,但不认为pip具有此类功能。我的想法是使用Heroku提供的挂钩来放置一个脚本,在依赖项安装之前向requirements.txt添加内容。这是否可行?
你可以在一个 requirements 文件中包含另一个 requirements 文件。
# requirements.txt
-r requirements/base.txt
# requirements/base.txt
django==1.6
# requirements/heroku.txt
-r requirements/base.txt
djpostgresurlthing==1.0.0
# requirements/dev.txt
-r requirements/base.txt
django-debug-toolbar
通常我会在项目的根目录下保留一个requirements.txt
文件,其中仅包含其他需求文件(通常是生产或基础)并创建一个requirements/
目录以放置特定环境的文件。所以本地我会执行pip install -r requirements/dev.txt
,在服务器上则会执行pip install -r requirements/prod.txt
。
对于你在heroku上的情况,你需要根目录下的requirements.txt文件用于heroku。因此,你可以使用该文件来包含你的heroku需求文件。
# requirements.txt
-r requirements/heroku.txt
也许有某种方法可以告诉Heroku使用另一个文件,但这将是绕过它的简单方法。
你可以进行标准的HTTPS认证:
# requirements.txt
git+https://user:password@example.com/dir/repo.git
但更加干净的方法是托管您自己的需求集,参见:https://devcenter.heroku.com/articles/python-pip#private-indexes
为了管理不同环境的需求,您可以简单地使用requirements.txt
用于生产和requirements-dev.txt
用于本地开发,或者使用@yellottyellott的建议之一来包含其他文件中的依赖项。