一篇很好的文章:
python跨目錄導包失敗 python不同路徑匯入包錯誤
在涉及到相對匯入時,package所對應的資料夾必須正確的被python直譯器視作package,而不是普通資料夾。否則由於不被視作package,無法利用package之間的巢狀關係實現python中包的相對匯入。
資料夾被python直譯器視作package需要滿足兩個條件:
1、資料夾中必須有__init__.py檔案,該檔案可以為空,但必須存在該檔案。
2、不能作為頂層模組來執行該資料夾中的py檔案(即不能作為主函式的入口)。
補充:在"from YY import XX"這樣的程式碼中,無論是XX還是YY,只要被python直譯器視作package,就會首先呼叫該package的__init__.py檔案。如果都是package,則呼叫順序是YY,XX。
另外,練習中“from . import XXX”和“from … import XXX”中的’.‘和’…’,可以等同於linux裡的shell中’.‘和’…'的作用,表示當前工作目錄的package和上一級的package。