Python 中的相對導入:詳細說明
使用包含多個子包的結構化目錄時,從其他子包導入模組可以是共同要求。但是,使用相對導入的標準方法(例如 from ..sub2 import mod2)在某些情況下可能會失敗。
開發人員嘗試在提供的目錄結構中從 mod1 導入 mod2 就是這種情況在問題中。錯誤訊息「嘗試在非套件中進行相對導入」表示相對導入有問題。
問題的根源在於模組作為 __main__ 運行,並將其作為參數傳遞給口譯員。根據 PEP 328,相對導入使用模組的 __name__ 屬性來決定其在套件層次結構中的位置。當模組的名稱設定為 __main__ 時,無論模組在檔案系統中的實際位置為何,都會像模組是頂層模組一樣解析相對導入。
嘗試匯入時,此行為可能會導致混亂來自其他子套件的模組。要解決此問題,建議將程式碼放在腳本中,並使用絕對導入明確導入相關子包,例如import sub2.mod2.
但是,在Python 2.6 及更高版本中,引用模組的能力相對於主模組進行了介紹。 PEP 366 描述了這項變更。為了有效地使用相對導入,必須引用主模組而不是使用 __main__。這可以透過多種方式實現,例如:
透過採用這些技術,開發人員可以有效地利用相對導入來組織他們的 Python 專案並以結構化方式管理模組之間的依賴關係。
以上是當模組作為「__main__」運行時,為什麼 Python 中的相對導入會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!