我在另一个包中有一个非常复杂的包树,如下所示
A\
B\
a.py
b.py
c.py
C\
a.py
b.py
c.py
我希望能够import A
并访问所有子包和子模块,例如A.B.a.foo()
。一种方法是A/__init__.py
导入所有A
的子包,但是一些子包也导入其他子包(例如,A.C
使用A.B
中的内容,导致到ImportError
。我正在寻找的是一种方法from A import B as A.B
,即导入子包,但仍然将它们绑定到父包。有一个好方法可以做到这一点吗? / p>
(我不确定这个问题是什么标题,如果有人有更好的标题,那么我会改变它。)
答案 0 :(得分:0)
你有没有尝试过:
在A.__init__
:
import B
import C
在B.__init__
:
import C, a, b, c
在C.__init__
:
import B, a, b, c
我尝试使用一些测试文件,它似乎工作正常。
In [5]: import A
In [6]: A.
A.B A.C
In [6]: A.B.
A.B.C A.B.a A.B.b A.B.c
答案 1 :(得分:0)
您不需要在__init__.py
中导入任何内容(只需确保每个包在Python< 3.3上都有此文件)。
如果您需要在模块中使用A.B.a.foo()
功能,请在其中添加相应的导入:
from A.B.a import foo