2015-08-25 7 views
4

Хорошая идея или хорошая практика программирования для проверки зависимостей модуля в файле __init__.py для модуля?__init__.py и импортные зависимости

Так что, если у меня есть что-то в моем __init__.py файл следующим образом:

import imp 
modules = set(["numpy", "scipy.spatial.distance"]) 
for m in modules: 
    try: 
     imp.find_module(m) 
    except ImportError: 
     print("Missing dependency: " + str(m)) 

Это хорошая практика, или есть более вещий способ справиться с этим?

+9

Если эти модули необходимы для вашего пакета, вы должны создать исключение. Если они не являются существенными, то выставляйте некоторые флаги функций и/или делаете исключения при попытке использовать функции, которые их требуют, и/или поднимите предупреждения. 'print()' для людей, пакеты Python для кода Python. –

+2

Как вы думаете, преимущество в том, чтобы сделать это, просто разрешив каждому модулю прямой «импорт»? – deceze

+0

Ах да, поэтому я должен на самом деле вызвать фатальное исключение. Конечно. Спасибо! – Luca

ответ

0

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

Часть хорошей практики заключается в том, как с ними бороться. Для чего-то такого же фундаментального, как пакеты/модули, всегда соответствуют стандарту. Если вам нужен пакет, не делайте явной проверки; если требуется foo, а import foo повышает значение ImportError, это именно то, что должно произойти. Если это не требуется, вы должны либо использовать свой код с резервным с той же функциональностью, либо испускать предупреждение, используя модули или warnings.

Смежные вопросы