我有两个分支,开发和生产。 每个人都有依赖性,其中一些是不同的。 发展指明本身是发展的依赖。 同样地进行生产。 我需要部署到Heroku的其中预计称为“requirements.txt”单个文件每个分支的依赖。
什么是组织最好的方法是什么?
我已经想到了:
- 维护单独要求的文件,一个在每个分支(必须生存频繁合并!)
- 告诉Heroku的哪些需求文件我想用(环境变量?)
- 写脚本部署(创建临时分支,修改文件的要求,提交,部署,删除临时分支)
我有两个分支,开发和生产。 每个人都有依赖性,其中一些是不同的。 发展指明本身是发展的依赖。 同样地进行生产。 我需要部署到Heroku的其中预计称为“requirements.txt”单个文件每个分支的依赖。
什么是组织最好的方法是什么?
我已经想到了:
您可以级联您的要求的文件,并使用“-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
当原来的问题和答案被张贴并不存在一个可行的选择是当今使用pipenv而不是点子来管理依赖。
随着pipenv,手动管理两个不同的要求的文件就像PIP不再是必要的,而是pipenv通过命令行交互管理的开发和生产包本身。
要安装包在生产和开发利用:
pipenv install <package>
要安装包仅开发环境:
pipenv install <package> --dev
通过这些命令,pipenv存储和管理两个文件(Pipfile和Pipfile.lock)环境配置。 Heroku的当前的Python buildpack本身支持pipenv,如果它存在,而不是requirements.txt将自己从Pipfile.lock配置。
见pipenv链接工具的完整文档。
如果您的要求是能够在同一台机器上的环境之间切换,可能有必要为每个你需要切换到环境中创建不同的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.