我有一个看起来像这样的目录结构:
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 *
from . import *
在这些情况都不是WonderfulThing
进口。 我也试着from ..foo import *
,这引起了一个错误“试图相对进口超出顶层包”。
我读过的文档和PEP,我不能工作,如何使这项工作。 任何援助将不胜感激。
澄清/编辑:好像我可能已经被误解的方式__all__
在包工作。 我用它一样的模块,
from .first import WonderfulThing
__all__ = [ "WonderfulThing" ]
但在看文档又似乎表明, __all__
只可在包被用来指定模块默认情况下,进口的姓名; 似乎没有要任何方式包括什么,这不是一个模块。
它是否正确?
编辑:非通配符导入失败( cannot import name WonderfulThing
)。 试图from . import foo
from . import foo
失败了,但import foo
工作。 不幸的是, dir(foo)
显示什么。