【问题标题】:pip complains about dependency versions but installs them anyway. Why?pip 抱怨依赖版本,但无论如何都会安装它们。为什么?
【发布时间】:2020-06-18 17:14:14
【问题描述】:

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

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 时,我看到这是输出:

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 install 时,我会看到以下输出:" 你的意思是 pip list 而不是 pip install
  • 对不起,你是对的。已编辑。

标签: python python-3.x pip dependencies boto3


【解决方案1】:

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

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

  • botocore==1.15.11
  • docutils==0.16

setup.cfg for botocore 1.15.11中可以看到:

[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&lt;0.16 只是作为预防措施。

【讨论】:

  • 那么这是否与 pip 中的限制有关,而不是与软件包有关?
  • 哦。再次阅读问题,并在我身边运行一些测试,确实......这两个要求botocore==1.15.11docutils==0.16 似乎确实不兼容:github.com/boto/botocore/blob/1.15.11/setup.cfg
  • 对,我的困惑是为什么 pip 会安装它们以及它如何仍然有效。
  • 1. 好吧,如果我没记错的话,pip 无论如何都会安装它,因为它当前的依赖求解器仍然有点弱。如果用户出于某种原因强制 安装,那么pip 没有理由阻止。 2. 至于它是如何工作的:你的意思是程序,导入仍然工作?可能 botocore 1.15.11 实际上并不完全与 docutils 0.16 不兼容。要么您没有找到会触发问题的代码路径,要么限制只是预防性的。
  • 好的,我想我现在明白了。所以在 pip 中有点松散的结局
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2022-10-25
  • 2017-02-11
相关资源
最近更新 更多