2017-08-01 195 views
3

我似乎無法得到絕對導入工作在Python中。這裏是我的文件結構:在python絕對導入不工作,相對導入工作

a/ 
    b/ 
    __init__.py 
    __init__.py 
    foo.py 

foo.py:

# Including or removing the __future__ import has no effect 
from __future__ import absolute_import 
from a import b # just `import b` works fine 
print "success!" 

我反而得到:

ImportError: No module named a 

世界到底是怎麼回事?我覺得我錯過了一些基本的東西。雖然這個例子很簡單,但我需要絕對導入才能爲真正的項目工作,所以只需用相對導入替換導入不是一種選擇。我使用python 2.7.13

無解的上市here幫助

預先感謝任何見解!

+0

在'a'目錄裏是'foo.py'嗎?你在圖中顯示爲外部。 – user2357112

+0

我的不好,感謝您的支持 – lbear

+0

這聽起來像是在直接運行軟件包的子模塊而不是作爲子模塊的常見錯誤。在這附近有一個重複的地方 - 真的,但我認爲至少有一個好的。 – user2357112

回答

2

,因爲它沒有顯示,我必須假設你正在運行python a/foo.py,當在現實中你要對sys.path開始在當前目錄下,這把腳本('a')的目錄上的sys.path開始。

您應該改爲運行python -m a.foo,它將正確初始化項目結構的sys.path根。

這裏的a more in-depth writeup,我寫在其他方式這個相同的問題可以pearshaped。

+0

謝謝!這是我正在尋找的解決方案/解釋。該鏈接也非常有幫助。 – lbear