繁体   English   中英

pip 抱怨依赖版本,但无论如何都会安装它们。 为什么?

[英]pip complains about dependency versions but installs them anyway. Why?

我有一个这样定义的需求文件:

requirements.txt

botocore==1.15.11
docutils==0.16

当我点击pip install -r requirements.txt我看到这个错误:

botocore 1.15.11 has requirement docutils<0.16,>=0.10, but you'll have docutils 0.16 which is incompatible.

但是,当我点击pip list时,我将其视为 output:

botocore        1.15.11
docutils        0.16   
jmespath        0.10.0 
pip             18.1   
python-dateutil 2.8.1  
setuptools      40.6.2 
six             1.15.0 
urllib3         1.25.9 
wheel           0.34.2 

这表明这两个依赖项是按照 requirements.txt 文件中的定义安装的。 如果没有问题,为什么还要抱怨呢? 如果有问题,它们是如何安装的?

pip当前的依赖求解器存在一些众所周知的问题(限制和错误)。 一个新的(更好的)正在进行中。 它已经可以测试了。 此答案及其链接中的更多详细信息: https://stackoverflow.com/a/60926641/11138259

话虽如此,这两个要求是不相容的:

  • botocore==1.15.11
  • docutils==0.16

从 botocore 1.15.11setup.cfg中可以看出:

[bdist_wheel]
universal = 1

[metadata]
requires-dist =
    python-dateutil>=2.1,<3.0.0
    jmespath>=0.7.1,<1.0.0
    docutils>=0.10,<0.16
    urllib3>=1.20,<1.25.8; python_version=='3.4'
    urllib3>=1.20,<1.26; python_version!='3.4'

无论如何,仍然可以指示pip安装这样的组合(被宣传为不兼容的组合)。 并且pip将警告此冲突,正如您在问题中所示,或者通过运行pip check (顺便说一下,据我所知,截至今天,它已经使用了较新的依赖解决方案):

$ pip check
botocore 1.15.11 has requirement docutils<0.16,>=0.10, but you have docutils 0.16.

不过,导入和执行的代码可能仍然可以正常工作,而不会出现任何(明显)问题。 例如:可能botocore 1.15.11实际上与docutils 0.16并不完全不兼容。 要么触发问题的代码路径没有命中,要么限制docutils<0.16只是作为预防措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM