Как разрешение зависимостей работает с pip, когда пакет указывает диапазон, а другой - нет? - PullRequest
1 голос
/ 24 апреля 2019

У меня есть require.txt только с двумя зависимостями:

sentry-sdk==0.7.11
requests==2.21.0

Я проверил setup.py обоих пакетов, и оба зависят от urllib3:

  • запрос предоставляет диапазон, который не принимает 1.25
  • sentry-sdk вместо этого не указывает конкретную версию или диапазон

недавно была выпущена новая версия urllib3 (1.25), когда я устанавливаю зависимости с помощью pip, я получаю следующую ошибку:

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

Ожидается ли такое поведение или это ошибка в пипсах?

Что означает не указывать версию зависимости в install_requires? "заставить последнюю версию"?

1 Ответ

1 голос
/ 24 апреля 2019

Причина, по которой вы наблюдаете такое поведение, заключается в том, что pip сначала устанавливает sentry-sdk. Так как для этого нет версии, вы получаете последнюю версию (1.25). Когда requests должен быть установлен, эта версия несовместима.

Единственный способ решить эту проблему - это решить все ограничения версий в глобальном масштабе, чего не может сделать пункт AFAIK.

Решение состоит в том, чтобы указать версию urllib3, которую вы хотите, в своем файле require.txt (поскольку вы знаете, какие версии его зависимостей вы используете). В любом случае это, вероятно, хорошая практика для временных пакетов без ограничений.

На самом деле, способ иметь воспроизводимые сборки с помощью pip - это всегда делать

pip freeze > requirements.txt

и проверьте результат. Таким образом, обновление стороннего пакета не нарушит вашу сборку, и вы всегда можете обновить его позже (и проверить результат).

...