我注意到我已經提出了大約5個問題,詢問有關相關進口,每個都有工作解決方案,但有不同的情況。我閱讀的文檔越多,越多地嘗試不同的案例越多,我越來越困惑,並質疑我是否正確地閱讀了單詞。更多相關進口奇怪:..記號
從PEP 328:
A single leading dot indicates a relative import, starting with the current package. Two or more leading dots give a relative import to the parent(s) of the current package, one level per dot after the first.
我的理解是, 「當前包」 是關鍵字在這裏。什麼是「當前套餐」?它是執行開始的模塊包嗎? (即:__名稱__ ==「__ main __」的文件)。
無論如何,這裏是我使用..
表示法的簡單情況。
main/ lib/ __init__.py myLib.py plugin/ __init__.py needLib.py run.py
run.py進口needLib:from plugin import needLib
needLib進口MYLIB:from ..lib import myLib
發生了什麼事在我的腦海:(needLib)上升一個包,進入lib下,搶MYLIB
下面是我如何執行:python run.py
結果:試圖相對導入超越頂層包年齡
但是,當我將導入電話更改爲from .lib import myLib
時,它工作。
我不明白爲什麼後者的作品和..
表示法沒有。當然,main
是不是一個包,所以怎麼樣我只是在一個init.py
有奉送,導致
main/ lib/ __init__.py myLib.py other/ __init__.py needLib.py __init__.py run.py
但是,這並沒有區別;仍然在嘗試導入超出頂層包
退房這個問題:python: forcing relative imports to search from script file
的..
符號確實工作!現在我想到了,我不明白它爲什麼起作用。該場景中的執行從相對導入發生的地方開始2級,而在此場景中的執行從相對導入發生的地方開始1級。除了我開始執行的地方外,情況完全相同。
兩者都是我說的「去一個目錄,進入lib包,並抓住你想要的模塊」。
這種情況與參考情況的關鍵區別是什麼?爲什麼..
在那裏工作,但不在這裏?我使用2.6有什麼關係嗎?或者也許我是如何執行它? python run.py