У меня есть приложение Foo который перебирает точки входа, используя группу под названием foo.modules. Затем он загружает все случаи, используя метод load(). Эта архитектура позволяет писать плагины/модули для приложения foo и находится в более подробной информации here.как выполнять родительское протоколирование имен при импорте питона модулей из точек входа
Кроме того, приложение настраивает некоторые обработчики ведения журнала при его запуске. Когда я загрузить плагины однако (скажем foo_plugin
), лесозаготовительной пространство имен Foo приложения не доступны в иерархии пространства имен, что приводит к предупреждениям, подобные этим:
No handlers could be found for logger "foo_plugin.plugin"
Концепция в том, что тот, кто пишет плагин может просто написать:
import logging
logger = logging.getLogger(__name__)
и лесозаготовительной плагин должен работать как Foo диктата приложений.
Если я явно предварять Foo имен (foo.
) перед переменной __name__
, лесозаготовительной снова работает, но это не очень элегантно, конечно. Любые лучшие идеи?
Они не должны ... вы правы. Прежде чем экспериментировать с точками входа, я загружал плагины из подпакета внутри _foo_, который, конечно же, выполнял регистрацию _foo_. Это заставило меня смутить мысль о том, что плагины тоже должны быть, что неправильно. – tasos