2012-07-22 38 views
1

的結構如下:一個模塊test包含兩個子模塊test.footest.bar圓形參照幀內的子模塊

test.foo有一個函數inc()使用因此基於Python文檔from . import bartest.bar.bar()是包括了正確的方式,而這種按預期工作。

test.bar然而,也具有這樣的功能inc2使用test.foo.foo,但是當使用from . import foo,這兩個模塊的破裂。

實現此目的的正確方法是什麼?我在Python文檔或搜索中發現很少。

代碼

測試/ _ 初始化 _.py

#empty 

測試/ foo.py

from . import bar 

def foo(): 
    print("I do foo") 

def inc(): 
    print(bar.bar()) 

測試/ bar.py

from . import foo 

def bar(): 
    print("I do bar") 

def inc2(): 
    print(foo.foo()) 

錯誤1

>>> import test.foo 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test/foo.py", line 1, in <module> 
    from . import bar 
    File "test/bar.py", line 1, in <module> 
    from . import foo 
ImportError: cannot import name foo 

錯誤2

>>> import test.bar 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test/bar.py", line 1, in <module> 
    from . import foo 
    File "test/foo.py", line 1, in <module> 
    from . import bar 
ImportError: cannot import name bar 

回答