如何为多个环境定制requirements.txt?

我有两个分支,开发和生产。 每个人都有依赖关系,其中一些是不同的。 开发指向自身正在开发的依赖关系。 同样适用于生产。 我需要部署到Heroku,希望每个分支的依赖关系在一个名为'requirements.txt'的文件中。

什么是最好的组织方式?

我想到的是:

  • 保持单独的需求文件,每个分支一个(必须经常融合!
  • 告诉Heroku我要使用哪个需求文件(环境variables?)
  • 编写部署脚本(创build临时分支,修改需求文件,提交,部署,删除临时分支)

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

`-- 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”,因此它应该只是反映prod,如下所示:

requirements.txt:

 # Mirrors prod -r requirements/prod.txt