首頁 >後端開發 >Python教學 >當模組作為「__main__」運行時,為什麼 Python 中的相對導入會失敗?

當模組作為「__main__」運行時,為什麼 Python 中的相對導入會失敗?

DDD
DDD原創
2024-12-19 06:43:10403瀏覽

Why Do Relative Imports Fail in Python When a Module is Run as `__main__`?

Python 中的相對導入:詳細說明

使用包含多個子包的結構化目錄時,從其他子包導入模組可以是共同要求。但是,使用相對導入的標準方法(例如 from ..sub2 import mod2)在某些情況下可能會失敗。

開發人員嘗試在提供的目錄結構中從 mod1 導入 mod2 就是這種情況在問題中。錯誤訊息「嘗試在非套件中進行相對導入」表示相對導入有問題。

問題的根源在於模組作為 __main__ 運行,並將其作為參數傳遞給口譯員。根據 PEP 328,相對導入使用模組的 __name__ 屬性來決定其在套件層次結構中的位置。當模組的名稱設定為 __main__ 時,無論模組在檔案系統中的實際位置為何,都會像模組是頂層模組一樣解析相對導入。

嘗試匯入時,此行為可能會導致混亂來自其他子套件的模組。要解決此問題,建議將程式碼放在腳本中,並使用絕對導入明確導入相關子包,例如import sub2.mod2.

但是,在Python 2.6 及更高版本中,引用模組的能力相對於主模組進行了介紹。 PEP 366 描述了這項變更。為了有效地使用相對導入,必須引用主模組而不是使用 __main__。這可以透過多種方式實現,例如:

  • __init__.py 可以宣告一個 __package__ 屬性來為包含的套件指派名稱。
  • 使用 __import__() 方法匯入子包並賦值給變數。
  • 使用佔位符模組 __init__.py 宣告 __path__和 __package__ 屬性,即使模組為空。

透過採用這些技術,開發人員可以有效地利用相對導入來組織他們的 Python 專案並以結構化方式管理模組之間的依賴關係。

以上是當模組作為「__main__」運行時,為什麼 Python 中的相對導入會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn