如何在Heroku部署时自定义pip的requirements.txt?

6
我正在将一个Python Django应用部署到Heroku,希望只在像Heroku这样的特定环境中自定义requirements.txt文件(通过添加带有密码的git后备依赖项)。我想将其设置为环境变量或其他形式,但不认为pip具有此类功能。我的想法是使用Heroku提供的挂钩来放置一个脚本,在依赖项安装之前向requirements.txt添加内容。这是否可行?
2个回答

17

你可以在一个 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使用另一个文件,但这将是绕过它的简单方法。


我应该明确说明,我需要添加的依赖项定制包括密码,因此我不能将其存储在仓库本身中,但可以使用类似环境变量的东西。有什么想法吗? - John Lehmann

0

你可以进行标准的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的建议之一来包含其他文件中的依赖项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接