Python复杂子包导入

时间:2013-06-05 04:19:02

标签: python python-import

我在另一个包中有一个非常复杂的包树,如下所示

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>

(我不确定这个问题是什么标题,如果有人有更好的标题,那么我会改变它。)

2 个答案:

答案 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