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.
约束文件与需求文件在一个关键方面不同:将包放入约束文件不会导致安装包,而需求文件将安装列出的所有包。约束文件只是控制将安装哪个版本的包但不提供对实际安装的控制的需求文件。
假设您有以下代码的 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 文件进行版本约束。
| 归档时间: |
|
| 查看次数: |
5261 次 |
| 最近记录: |