2013-06-05 33 views
1

我有一個非常複雜的包樹就像另一個包Python的複雜分裝進口

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 ,即進口子包,但仍然有他們綁定到父包。有沒有一個好辦法做到這一點?

(我不知道什麼標題體現了這個問題,如果有人有一個更好的標題,那麼我'會改變它)

+0

你有一個圓形的進口那裏,這通常意味着你必須在你的包中的一些設計缺陷。如果'B'和'C'都需要對方,那麼它們可能會合併成一個包。 – Bakuriu

+0

@Bakuriu我不認爲這是必然或普遍真實的(儘管它可能比錯誤的真實性更高)。有時候我有兩個概念上相當不同的包,即使它們的實現有點混雜,也需要一些相互依賴。這並不美觀,但在某些情況下,將所有內容合併在一起可能會更糟糕。編輯:我意識到你說「可能」,而不是「絕對」,但我仍然想提出另一個論點。 – cxrodgers

回答

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 
0

你並不需要導入__init__.py任何東西(只是確保每個包都有關於Python < 3.3本文件)。

如果您需要使用A.B.a.foo()功能模塊中,然後添加相應的進口在它:

from A.B.a import foo