pip жалуется на версии зависимостей, но все равно устанавливает их. Зачем? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть файл требований, определенный следующим образом:

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 I см. это как результат:

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. Зачем на это жалуются, если это не проблема? Если это проблема, то как они были установлены?

1 Ответ

1 голос
/ 17 июня 2020

Есть несколько хорошо известных проблем (ограничений и ошибок) с текущим решателем зависимостей pip . Новый (лучший) в разработке. Это уже можно проверить. Подробнее в этом ответе и его ссылках: { ссылка }

С учетом сказанного, эти два требования несовместимы:

  • botocore==1.15.11
  • docutils==0.16

Как видно на setup.cfg для ботокора 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<0.16 было введено в качестве превентивной меры.

...