我有一个如下所示的目录结构:
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
在named中有一个类WonderfulThing
,我想在 in 中使用它second.py
,并且想通过导入*
from来导入foo
。(假设我有充分的理由,为什么我想这样做超出了这个问题的范围。)
在second.py
我已经尝试过from .foo import *
,from foo import *
并且from . import *
在这些情况下都没有WonderfulThing
导入。我也试过from ..foo import *
了,这会引发错误“尝试相对导入超出顶级包”。
我已经阅读了文档和 PEP,但我不知道如何使它工作。任何援助将不胜感激。
澄清/编辑:似乎我可能误解了__all__
包中的工作方式。我在模块中使用它,
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
但是再次查看文档似乎建议__all__
只能在包中使用以指定默认情况下要导入的模块的名称;似乎没有任何方法可以包含任何不是模块的东西。
它是否正确?
非通配符导入失败 ( cannot import name WonderfulThing
)。尝试from . import foo
失败,但import foo
有效。不幸的是,dir(foo)
什么也没显示。