我知道有幾個類似的問題,但我很努力去理解我得到的錯誤,瀏覽文檔和類似的問題還沒有幫助。如果有的話,類似的問題讓我覺得我所做的是對的。瞭解Python中的導入鏈
我有以下文件:
的src/main.py
from pack import pack
if __name__ == '__main__':
pack.exec("Hello Universe!")
的src /包/ pack.py
import util
def exec(text):
util.write(text)
if __name__ == '__main__':
exec("Hello World!")
SRC /包/ util.py
def write(text):
print(text)
* 的src /包/ _ INIT _.py *
EMPTY FILE
當我從src/pack
目錄運行python pack.py
,它工作(打印「Hello World!」)。然而,當我從src
目錄運行python main.py
我得到以下異常:
Traceback (most recent call last):
File ".../src/main.py", line 1, in <module>
from pack import pack
File ".../src/pack/pack.py", line 1, in <module>
import util
ImportError: No module named util
如果我在pack.py
更改導入線from . import util
的建議,有效相反occours。 main.py
運行成功,但是現在pack.py
失敗,籌措:
Traceback (most recent call last):
File ".../src/pack/pack.py", line 1, in <module>
from . import util
ValueError: Attempted relative import in non-package
我本來以爲進口相對於當前位置,因此你應該能夠建立這樣的進口鏈條。對我來說,看起來很奇怪,根據程序啓動的位置,模塊應該導入一個兄弟文件。
有人可以解釋爲什麼這種錯誤發生在一種方式,而不是另一種方式,並且如果有某種方式允許此文件結構運行,無論我是想從main.py
還是pack.py
運行?
什麼版本的Python? – 2011-03-08 01:53:46
Win7 32bit上的Python 3.1.3 – dimo414 2011-03-08 01:55:39