如何自定义多个环境中requirements.txt?如何自定义多个环境中requirements.

2019-05-13 01:18发布

我有两个分支,开发和生产。 每个人都有依赖性,其中一些是不同的。 发展指明本身是发展的依赖。 同样地进行生产。 我需要部署到Heroku的其中预计称为“requirements.txt”单个文件每个分支的依赖。

什么是组织最好的方法是什么?

我已经想到了:

  • 维护单独要求的文件,一个在每个分支(必须生存频繁合并!)
  • 告诉Heroku的哪些需求文件我想用(环境变量?)
  • 写脚本部署(创建临时分支,修改文件的要求,提交,部署,删除临时分支)

Answer 1:

您可以级联您的要求的文件,并使用“-r”标志告诉点子包括内部另一个文件的内容。 你可以摆脱你的要求到这样一个模块化的文件夹层次结构:

`-- django_project_root
|-- requirements
|   |-- common.txt
|   |-- dev.txt
|   `-- prod.txt
`-- requirements.txt

该文件的内容是这样的:

common.txt:

# Contains requirements common to all environments
req1==1.0
req2==1.0
req3==1.0
...

dev.txt:

# Specifies only dev-specific requirements
# But imports the common ones too
-r common.txt
dev_req==1.0
...

prod.txt:

# Same for prod...
-r common.txt
prod_req==1.0
...

Heroku的以外,你现在可以设置的环境是这样的:

pip install -r requirements/dev.txt

要么

pip install -r requirements/prod.txt

由于Heroku的专门寻找“requirements.txt”在项目的根,它应该只是反映督促,就像这样:

requirements.txt:

# Mirrors prod
-r requirements/prod.txt


Answer 2:

当原来的问题和答案被张贴并不存在一个可行的选择是当今使用pipenv而不是点子来管理依赖。

随着pipenv,手动管理两个不同的要求的文件就像PIP不再是必要的,而是pipenv通过命令行交互管理的开发和生产包本身。

要安装包在生产和开发利用:

pipenv install <package>

要安装包仅开发环境:

pipenv install <package> --dev

通过这些命令,pipenv存储和管理两个文件(Pipfile和Pipfile.lock)环境配置。 Heroku的当前的Python buildpack本身支持pipenv,如果它存在,而不是requirements.txt将自己从Pipfile.lock配置。

见pipenv链接工具的完整文档。



Answer 3:

如果您的要求是能够在同一台机器上的环境之间切换,可能有必要为每个你需要切换到环境中创建不同的virtualenv文件夹。

python3 -m venv venv_dev
source venv_dev/bin/activate
pip install -r pip/common.txt
pip install -r pip/dev.txt
exit
python3 -m venv venv_prod
source venv_prod/bin/activate
pip install -r pip/common.txt
exit
source venv_dev/bin/activate
# now we are in dev environment so your code editor and build systems will work.

# let's install a new dev package:
# pip install awesome
# pip freeze -r pip/temp.txt
# find that package, put it into pip/dev.txt
# rm pip/temp.txt

# pretty cumbersome, but it works. 


文章来源: How to customize a requirements.txt for multiple environments?