Предположим, что у меня есть пакет, содержащий два подмодуля, а также значительную часть кода в __init__.py
:
pkg/__init__.py
pkg/foo.py
pkg/bar.py
и, чтобы облегчить планируемое будущее рефакторинг, я хочу, чтобы компоненты пакета использовали исключительно относительный импорт для ссылки друг на друга. В частности, import pkg
никогда не должно появляться.
Из foo.py
я могу сделать
from __future__ import absolute_import
from . import bar
чтобы получить доступ к модулю bar.py
и наоборот.
Вопрос в том, что я пишу для импорта __init__.py
таким образом? Я хочу точно такой же эффект, как import pkg as local_name
, только без указания абсолютного имени pkg
.
#import pkg as local_name
from . import ??? as local_name
ОБНОВЛЕНИЕ: Вдохновленный ответом maxymoo, я попробовал
from . import __init__ as local_name
Это не устанавливает local_name
в модуль, определенный __init__.py
; вместо этого он получает то, что кажется оберткой связанного метода для метода __init__
этого модуля. Я полагаю, я мог бы сделать
from . import __init__ as local_name
local_name = local_name.__self__
чтобы получить то, что я хочу, но (a) yuck, и (b) это заставляет меня беспокоиться о том, что модуль не был полностью инициализирован.
Ответы должны работать как на Python 2.7, так и на Python 3.4 +.
Да, вероятно, было бы лучше выбить __init__.py
и просто перегрузить материал из подмодулей, но этого пока не может быть.