Как передать данные для инициализации пакета, например, с помощью регистратора в python? - PullRequest
0 голосов
/ 27 сентября 2019

Проблема (поэтому я не застреваю в XY): при инициализации пакета A я хочу передать регистратору из пакета импорт A.

Моя попытка найти решение:

Создание __init__() функции в теле пакета, похоже, не работает так, как мне кажется, импорт из import A(my_logger).

Вызов A.__init__(my_logger) правильно устанавливает переменную;однако другие элементы в пакете уже были импортированы и имеют исходные значения регистратора (которые вы должны установить, чтобы построить синтаксически правильный Python - исправьте меня, если я ошибаюсь, пожалуйста).Поэтому делать это так поздно.

Кто-нибудь знает, как это сделать?Мне нужно сделать это при импорте, чтобы я получил весь пакет с постоянными значениями.

1 Ответ

3 голосов
/ 27 сентября 2019

Может быть, вам следует создать файл __init__.py в пакете A:

A/
    __init__.py

и использовать регистратор в файле __init__.py, например:

import logging
logger = logging.getLogger('__main__')
logger.debug("hello debug")
logger.error("hello error")

Другой способВы можете использовать имя пакета:

import logging
logger = logging.getLogger(__name__)
logger.debug("hello debug")
logger.error("hello error")

и после импорта A получить регистратор пакета A

import A
logger_a = logging.getLogger('A')

Я не понимаю, для чего это нужно, но янайденное решение для вас:

importer_a.py:

import os
import logging
logger = logging.getLogger('logger_importer_a')
logger.setLevel(logging.WARNING)
os.environ['logger_for_a'] = logger.name
import A

A__init __. py:

import os
import logging
logger_from_importer = logging.getLogger(os.environ.get('logger_for_a'))

Подумайте о правильной архитектуре проекта и последовательности импорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...