PIP约束文件

Jam*_*Lin 18 python pip

我正在阅读文档而无法绕过它:

约束文件是需求文件,仅控制安装了哪个版本的需求,而不是是否已安装.它们的语法和内容几乎与要求文件相同.

有一个关键区别:在约束文件中包含一个包不​​会触发包的安装.

  • 那么这是否意味着我需要首先要求文件然后运行约束?
  • 需要同时有requirements.txt和constraints.txt?
  • 还是只是-c requirements.txt

有人可以用简单的英语解释新的PIP功能:约束文件吗?

jwh*_*ock 20

我认为约束文件是将"真实"要求与完整安装列表分开的好方法.

在您的需求文件中完全指定包版本是一种很好的做法.例如,如果您使用Django LTS 安装django-allauth,请将其固定到最新版本(截至我的回答):

Django==1.8.12
django-allauth==0.25.2
Run Code Online (Sandbox Code Playgroud)

安装软件包时,它最终会安装一些必需的软件包.所以,你也添加它们,以便每个人都获得相同版本的包:

Django==1.8.12
django-allauth==0.25.2
oauthlib==1.0.3
python-openid==2.2.5
requests==2.9.1
requests-oauthlib==0.6.1
Run Code Online (Sandbox Code Playgroud)

然后你得到错误报告"在Python 3下不起作用".糟糕,python-openid只是Python 2,python3-openid而是使用,进一步要求defusedxml:

Django==1.8.12
django-allauth==0.25.2
oauthlib==1.0.3
python-openid==2.2.5   ; python_version < '3.0'
python3-openid==3.0.10 ; python_version >= '3.0'
defusedxml==0.4.1      ; python_version >= '3.0'
requests==2.9.1
requests-oauthlib==0.6.1
Run Code Online (Sandbox Code Playgroud)

现在requirements.txt变得丑陋了,很难看到Django和django-allauth在混乱中的"要求".

这是一个requirements.txt引用约束文件:

-c constraints.txt
Django==1.8.12
django-allauth==0.25.2
Run Code Online (Sandbox Code Playgroud)

constraints.txt提供有用的评论:

# django-allauth requirements
oauthlib==1.0.3
python-openid==2.2.5
python3-openid==3.0.10
defusedxml==0.4.1
requests==2.9.1
requests-oauthlib==0.6.1
Run Code Online (Sandbox Code Playgroud)

不需要Python分类器,因为只有在包需要时才会安装约束,否则会被忽略.此外,如果包裹在未来2年内停止需要另一个包裹,则全新安装将停止安装.

我认为这个以及一些注释是一种有用的方式来传达您正在使用的项目包,以及包含哪些包,因为它们是依赖项.

我认为如果你使用pip 8.x的散列检查模式会变得更有用,这需要指定依赖项依赖项的版本.如果你走这条路,我建议使用hashin来帮助你管理哈希.有关使用约束和散列的复杂需求设置,请参阅browsercompat.

  • 您好,我有点困惑,在约束中指定 `python-openid==2.2.5` 和 `python3-openid==3.0.10` 将有助于根据 python 版本确定使用哪一个? (2认同)

Vla*_*den 9

来自《Python忍者秘方》一书

约束文件与需求文件在一个关键方面不同:将包放入约束文件不会导致安装包,而需求文件将安装列出的所有包。约束文件只是控制将安装哪个版本的包但不提供对实际安装的控制的需求文件。

假设您有以下代码的 requirements.txt 文件

# requirements.txt
pandas
Run Code Online (Sandbox Code Playgroud)

和约束.txt

# constraints.txt
 # math / science / graph stuff
  bokeh==0.11.1
  numpy==1.10.4
  pandas==0.17.1
  scipy==0.17.0
  openpyxl==2.3.3
  patsy==0.4.1
  matplotlib==1.5.1
  ggplot==0.6.8
  seaborn==0.7.0
  scikit-learn==0.17
Run Code Online (Sandbox Code Playgroud)

执行

pip install -c constraints.txt

将从requirements.txt 安装所有包并使用constraints.txt 文件进行版本约束。