Как получить доступ к переменным __init__.py из более глубоких частей пакета - PullRequest
8 голосов
/ 18 мая 2010

Прошу прощения за еще один __init__.py вопрос.

У меня следующая структура пакета:

+contrib
  +--__init__.py
  |
  +database
      +--__init__.py
      |
      +--connection.py

На верхнем уровне __init__.py я определяю: USER='me'. Если я import contrib из командной строки, то я могу получить доступ к contrib.USER.

Теперь я хочу получить доступ к contrib.user с помощью connection.py, но не могу этого сделать.

Верхний уровень __init__.py вызывается, когда я запускаю from contrib.database import connection, поэтому Python действительно создает параметр USER.

Таким образом, вопрос заключается в следующем: как получить доступ к параметрам и переменным, объявленным на верхнем уровне __init__.py из children .

Спасибо.

EDIT:

Я понимаю, что вы можете добавить import contrib к connection.py, но это кажется повторяющимся, так как очевидно (неправильно?), Что если вам нужно connection.py, то вы уже импортировали contrib.

Ответы [ 2 ]

13 голосов
/ 18 мая 2010

Добавление import contrib к connection.py - путь. Да, модуль contrib уже импортирован (вы можете узнать из sys.modules). Проблема в том, что нет ссылки на модуль из вашего кода в connection.py. Выполнение другого импорта даст вам ссылку. Вам не нужно беспокоиться о дополнительном времени загрузки, поскольку модуль уже загружен.

0 голосов
/ 18 мая 2010

Вам необходимо импортировать contrib в connection. Либо используйте относительный импорт (..contrib), либо абсолютный импорт.

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