Это был бы случай, когда было бы неплохо, если бы у Python проектов были пространства имен (pip install com.rocket.u2py
и import com.rocket.u2py as u2py
).
С моей точки зрения, есть два аспекта, которые следует учитывать: на проект уровень, на уровне пакет уровень.
1. проект (пакет распространения)
Я считаю, что это плохая практика заставить альтернативные источники загрузки для конечного пользователя вашего проекта. По умолчанию pip следует загружать с PyPI и нигде, кроме случаев, когда пользователь сам решит это (с помощью --find-links
или аналогичных опций, которые вы можете указать своим пользователям в своей документации). ).
Поскольку это такая нишевая зависимость, думаю, я бы просто не добавил ее к install_requires
. Я бы предположил, что конечные пользователи вашего проекта уже знают о зависимости и могут установить ее самостоятельно.
Также я не верю, что можно надежно проверить в время установки если установлена правильная зависимость, поскольку setup.py
не всегда запускается (может помочь переопределение команды bdist_wheel
, но, вероятно, неэффективно на 100%).
2. package ( импортный пакет)
Я не уверен, что необходимо какое-то конкретное c действие. Скорее всего, код рано или поздно потерпит неудачу, потому что модуль или функция не импортируются. Что может быть хорошо-я sh, может быть?
Но, вероятно, определить, установлена ли зависимость (и она правильная), относительно легко и обеспечит лучший пользовательский опыт. Либо проверьте, что некоторые указанные c модули или функции являются импортируемыми. Или проверьте метаданные (import importlib_metadata; importlib_metadata.distribution('u2py').metadata['Author']
).
В случае приложения я бы попытался изящно завершить работу как можно скорее. В случае библиотеки я бы попытался найти одно стратегическое c место для размещения чека и вызвать специальное исключение (CannotFindU2pyException
).
Ссылки: