Я не изменил требования в своем проекте Divio, так почему сборка не удается из-за конфликта зависимостей? - PullRequest
0 голосов
/ 09 ноября 2018

В последний раз, когда я развертывал проект, сборка работала отлично.

Тем временем я не изменил ничего, что могло бы повлиять на требования к пунктам, но при сборке я получаю сообщение об ошибке:

Could not find a version that matches Django<1.10,<1.10.999,<1.11,
<1.12,<1.9.999,<2,<2.0,==1.9.13,>1.3,>=1.11,>=1.3,>=1.4,>=1.4.10,
>=1.4.2,>=1.5,>=1.6,>=1.7,>=1.8

Я получаю ту же ошибку при локальном построении проекта с docker-compose build web.

В чем может быть проблема?

1 Ответ

0 голосов
/ 09 ноября 2018

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

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

Везде, где существует незакрепленная зависимость, вы можете столкнуться с этим.

Вот пример. Предположим, что ваш requirements.in содержит super-django==1.2.4. Это лучше, чем просто указать super-django, так как вы не удивитесь, если выйдет новая несовместимая версия пакета Super Django.

Но предположим, что в свою очередь Super Django 1.2.4, в его требованиях, перечислены:

Django==1.11
django-super-admin

Если выпущена новая версия Django Super Admin, для которой требуется, скажем, Django>=2.0, ваша следующая сборка будет неудачной из-за взаимоисключающих требований.

Чтобы отследить виновника, когда вы столкнетесь с таким сбоем, вам нужно проверить журналы сборки. Там вы увидите что-то вроде:

Could not find a version that matches Django==1.11,>=2.0 [etc].

Итак, теперь вы знаете, просматривая журналы, чтобы найти то, что хотите установить Django>=2.0, и вы найдете:

adding Django>=2.0
  from django-super-admin==1.7.0

Итак, теперь вы знаете, что ключом является django-super-admin==1.7.0. Поскольку вы не можете доверить super-django правильную версию django-super-admin, вам придется сделать это самостоятельно, добавив django-super-admin<1.7.0 к requirements.in вашего проекта.

Подробнее об этом см. На Как определить и разрешить конфликт зависимостей .

Вы также можете Закрепить все зависимости Python вашего проекта , чтобы гарантировать, что это никогда не случится с любой другой зависимостью, хотя вы жертвуете некоторой гибкостью для гарантии.


Примечание: я являюсь членом команды Divio. Этот вопрос мы регулярно видим по каналам поддержки.

...