пункт не правильно разрешает зависимости детей / внуков - PullRequest
3 голосов
/ 30 марта 2020

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

a → b, c
b → ruamel.yaml >= 0.16.5
c → ruamel.yaml < 0.16.6, >=0.12.4

Мне очень ясно, что ruamel.yaml 0.16.5 правильно разрешит обе эти зависимости. Однако, когда я pip install a, я получаю следующие журналы:

Collecting ruamel.yaml>=0.16.5
  Downloading ruamel.yaml-0.16.10-py2.py3-none-any.whl (111 kB)

А потом:

ERROR: <package c> 0.4.0 has requirement ruamel.yaml<0.16.6,>=0.12.4, but you'll have ruamel-yaml 0.16.10 which is incompatible.

Таким образом, pip полностью игнорирует зависимости внуков при выборе пакетов для установки. , Но он понимает, что все испортилось в конце. Почему пункт не выбирает правильный пакет здесь. Есть ли способ помочь ему работать лучше?

1 Ответ

4 голосов
/ 30 марта 2020

Я считаю, что это хорошо известная проблема, над которой в настоящее время ведется работа. Сообщение от одной недели: go: http://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html

Тем временем, есть некоторые меры, которые можно предпринять, чтобы попытаться решить такие проблемы:

  • Изменить порядок зависимостей (в вашем примере a может перечислить c до b)
  • Использовать дополнительные requirements.txt или constraints.txt файл
  • В зависимости от реальных потребностей, альтернативный инструмент может помочь (я считаю стихи , pipenv , и, скорее всего, другие также могут иметь распознаватели зависимостей , но они не являются заменой один к одному для pip )

Похоже, уже сегодня можно протестировать будущий распознаватель зависимостей pip :

В некотором смысле также представляется возможным несколько протестировать этот преобразователь зависимостей в текущих выпусках или pip через pip check команда.

Еще несколько ссылок на топи c:

...