Я разрабатываю пакет Python my_package
, который зависит от какого-то другого пакета foo_package
.
Существует несколько версий foo_package
, которые используются в сообществе, и, к сожалению, это не так. обратно совместимы друг с другом. (Из-за изменений в интерфейсе C, с которыми скомпилирован мой код).
Поэтому я хотел бы распространить несколько копий my_package
, соответствующих различным версиям foo_package
.
Я могу отличить эти разные копии my_package
друг от друга, используя теги после выпуска. Например, я могу дать my_package
версию 1.1.4-foo_package1.2
, соответствующую версии 1.1.4
из my_package
, скомпилированной с версией 1.2
из foo_package
.
Пока все хорошо. Предостережение заключается в том, что когда дело доходит до установки этого с pip
, конечные пользователи должны указать эту строку полной версии, чтобы иметь возможность получить правильную версию my_package
. То есть они должны знать, что последний выпуск my_package
- это 1.1.4
, а используемый ими выпуск foo_package
- 1.2
, и, следовательно, использовать команду pip install my_package==1.1.4-foo_package1.2
.
* 1029. * Очевидно, что это не идеально для всех видов причин. (Удобство для конечного пользователя, избегая адской зависимости ...) В конце концов, все это можно определить программно!
Есть ли какой-нибудь разумный способ справиться с этой проблемой, чтобы конечный пользователь мог просто запустить pip install my_package
и правильно ли загружена правильная копия?
Есть один неудовлетворительный ответ на аналогичный вопрос здесь .
FWIW лучшее решение, которое я до сих пор придумалсоздать еще один пакет my_package_installer
, который как часть его setup.py
проверяет, какая версия foo_package
установлена, а затем указывает соответствующую версию my_package
в качестве аргумента install_requires
для setuptools.setup
. Но это совершенно глупо и кажется довольно хрупким. Я не могу быть единственным с этой проблемой.