Как я могу заставить эти относительные операции импорта работать в Python 3?
У меня есть структура каталогов, которая выглядит следующим образом:
project/
__init__.py
foo/
__init.py__
first.py
second.py
third.py
plum.py
Вproject/foo/__init__.py
Я импортирую классы изfirst.py
, second.py
а такжеthird.py
и положить их в__all__
.
Есть класс вfirst.py
названныйWonderfulThing
который я хотел бы использовать вsecond.py
и хотите импортировать, импортируя*
изfoo
, (Это выходит за рамки этого вопроса, почему я хотел бы сделать это, предположим, у меня есть веская причина.)
Вsecond.py
я пробовалfrom .foo import *
, from foo import *
а такжеfrom . import *
и ни в одном из этих случаевWonderfulThing
импортирован. Я тоже пробовалfrom ..foo import *
, что вызывает ошибку «Попытка относительного импорта за пределы пакета верхнего уровня».
Я прочитал документы и PEP, и я не могу понять, как заставить это работать. Любая помощь будет оценена.
Осветление / Edit: Кажется, я неправильно понял, как__all__
работает в пакетах. Я использовал его так же, как в модулях,
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
но, глядя на документы снова, кажется, что__all__
может использоваться только в пакетах для указания имен модулей, которые будут импортированы по умолчанию; кажется, нет никакого способа включить что-то, что не является модулем.
Это верно?
Редактировать: Не удалось импортировать без подстановочного знака (cannot import name WonderfulThing
). Попыткаfrom . import foo
не удалось, ноimport foo
работает. К несчастью,dir(foo)
ничего не показывает