Я занимаюсь разработкой библиотеки Python с модулем, который зависит от стороннего пакета, недоступного через PyPi или Anaconda.Модуль должен предоставлять некоторые функции, если зависимость доступна в системе, и в противном случае изящно завершать работу с соответствующим сообщением.
На данный момент я обрабатываю это следующим образом:
try:
import the_dependency as td
def foo(x):
return td.bar(x)
except ImportError:
print('Failed to import the_dependency, the whole module will not be available')
Этопока работает, но мне не нравится идея иметь объявления функций внутри блока try (это выглядит грязно).Я посмотрел на другие библиотеки, которые имеют такое поведение, и я нашел это решение:
try:
import the_dependency as td
except ImportError:
td = None
def foo(x):
if td is None:
raise ImportError('the_dependency is required to run foo')
return td.bar(x)
, но опять же, это выглядит грязно и требует дублирования кода / сообщений об ошибках.
Естьесть лучший способ справиться с этим, в Python?
Спасибо