首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为多个环境自定义一个requirements.txt?

如何为多个环境自定义一个requirements.txt?
EN

Stack Overflow用户
提问于 2013-07-23 15:23:07
回答 3查看 53.5K关注 0票数 147

我有两个分支,开发和生产。每一个都有依赖关系,其中一些是不同的。开发指向自身处于开发中的依赖项。生产也是如此。我需要部署到Heroku,它希望每个分支的依赖项都放在一个名为‘quirements.txt’的文件中。

最好的组织方式是什么?

我想到的是:

  • 维护单独的需求文件,每个分支中都有一个(必须经受住频繁的合并!)
  • 告诉Heroku我要使用哪个需求文件(环境和部署脚本(创建临时分支、修改需求文件、提交、部署、删除临时分支)
EN

回答 3

Stack Overflow用户

发布于 2013-12-21 22:30:24

您可以级联您的需求文件,并使用"-r“标志告诉pip将一个文件的内容包含在另一个文件中。您可以将需求分解为模块化的文件夹层次结构,如下所示:

代码语言:javascript
复制
`-- django_project_root
|-- requirements
|   |-- common.txt
|   |-- dev.txt
|   `-- prod.txt
`-- requirements.txt

文件的内容将如下所示:

common.txt:

代码语言:javascript
复制
# Contains requirements common to all environments
req1==1.0
req2==1.0
req3==1.0
...

dev.txt:

代码语言:javascript
复制
# Specifies only dev-specific requirements
# But imports the common ones too
-r common.txt
dev_req==1.0
...

prod.txt:

代码语言:javascript
复制
# Same for prod...
-r common.txt
prod_req==1.0
...

在Heroku之外,您现在可以像这样设置环境:

代码语言:javascript
复制
pip install -r requirements/dev.txt

代码语言:javascript
复制
pip install -r requirements/prod.txt

由于Heroku专门在项目根中查找"requirements.txt“,它应该只镜像prod,如下所示:

requirements.txt:

代码语言:javascript
复制
# Mirrors prod
-r requirements/prod.txt
票数 283
EN

Stack Overflow用户

发布于 2018-08-29 14:39:01

现在一个可行的选择是使用pipenv而不是pip来管理依赖关系,这在最初的问题和答案发布时还不存在。

使用pipenv,不再需要像pip那样手动管理两个独立的需求文件,而是通过命令行上的交互来管理开发和生产包本身。

要安装在生产和开发中使用的软件包,请执行以下操作:

代码语言:javascript
复制
pipenv install <package>

要仅为开发环境安装软件包,请执行以下操作:

代码语言:javascript
复制
pipenv install <package> --dev

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

有关该工具的完整文档,请参阅pipenv链接。

票数 19
EN

Stack Overflow用户

发布于 2019-04-01 16:23:51

如果您的需求是能够在同一台计算机上的环境之间进行切换,则可能需要为您需要切换到的每个环境创建不同的virtualenv文件夹。

代码语言:javascript
复制
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. 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17803829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档