Я только начал экспериментировать с новой техникой, которую я назвал (на данный момент, по крайней мере) «модульная утка».
Пример:
Основной модуль
import somepackage.req ## module required by all others
import abc
import Xyz
Модуль abc
__all__=[]
def getBus():
""" Locates the `req` for this application """
for mod_name in sys.modules:
if mod_name.find("req") > 0:
return sys.modules[mod_name].__dict__["Bus"]
raise RuntimeError("cannot find `req` module")
Bus=getBus()
В модуле abc
Мне не нужно явно import req
: это может быть где угодно в иерархии пакетов. Конечно, это требует некоторой дисциплины ...
С помощью этой техники легко перемещать пакеты внутри иерархии.
Есть ли подводные камни, ожидающие меня? например переход на Python 3K
Обновлено : после еще одного тестирования я решил вернуться к вставке зависимостей пакетов непосредственно в sys.path
.