Как я могу заставить эти относительные операции импорта работать в 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) ничего не показывает

Ответы на вопрос(1)

Ваш ответ на вопрос