pip3 устанавливает версию зависимости, которая нарушает спецификаторы требований - PullRequest
0 голосов
/ 12 мая 2019

У меня есть следующие две зависимости в моем requirements.txt:

$ pip3 install elasticsearch==7.0.0 requests==2.21.0
Collecting elasticsearch==7.0.0
  Using cached https://files.pythonhosted.org/packages/a8/27/d3a9ecd9f8f972d99da98672d4766b9f62ef64c323c40bb5e2557e538ea3/elasticsearch-7.0.0-py2.py3-none-any.whl
Collecting requests==2.21.0
  Using cached https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3>=1.21.1 (from elasticsearch==7.0.0)
  Using cached https://files.pythonhosted.org/packages/39/ec/d93dfc69617a028915df914339ef66936ea976ef24fa62940fd86ba0326e/urllib3-1.25.2-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests==2.21.0)
  Using cached https://files.pythonhosted.org/packages/60/75/f692a584e85b7eaba0e03827b3d51f45f571c2e793dd731e598828d380aa/certifi-2019.3.9-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.21.0)
  Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests==2.21.0)
  Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl
requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25.2 which is incompatible.
Installing collected packages: urllib3, elasticsearch, certifi, chardet, idna, requests
Successfully installed certifi-2019.3.9 chardet-3.0.4 elasticsearch-7.0.0 idna-2.8 requests-2.21.0 urllib3-1.25.2

Я хочу понять это предупреждение, которое появилось в приведенном выше выводе:

requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25.2 which is incompatible.

Почему pip установилurllib3 1.25.2?Кажется, это не имеет смысла.Требуемые зависимости:

Обе зависимости могли бы быть легко удовлетворены путем установки urllib3 1.24.3.Почему pip3 тогда установили urllib3 1.25.2?Разве решение о правильной версии в соответствии с доступными требованиями не входит в его обязанности?

Это ошибка в pip3 или она работает так, как задумано?

1 Ответ

1 голос
/ 13 мая 2019

Как и сейчас, pip не имеет истинного разрешения зависимостей , но вместо этого просто использует первую найденную спецификацию для проекта.

Вы можете добавить constraints.txt файл с помощью urllib3==1.24.3 и затем вызвать:

$ pip install -r requirements.txt -c contraints.txt

Это сделало бы работу. При обновлении требований не забудьте обновить также ограничения.

В качестве альтернативы вы можете использовать один из Python диспетчеров зависимостей :

См. Файлы требований и Файлы ограничений разделы в руководстве пользователя pip и Управление зависимостями приложений учебник.

...