Python 中的相對導入
在使用相對導入時,經常會出現「嘗試在非套件中進行相對導入」的常見錯誤Python。本文旨在闡明相對導入的概念並提供解決此錯誤的解決方案。
腳本和模組之間的差異
主要區別在於 Python 檔案的方式已載入。直接使用 python myfile.py 執行的檔案被視為頂級腳本。相反,在另一個檔案中使用 import 語句導入的檔案是一個模組。這種區別對於理解相對導入至關重要。
命名的重要性
載入後,每個檔案都會被指派一個儲存在 name 屬性中的名稱。如果作為腳本加載,其名稱將設定為 __main__。如果以模組匯入,其名稱會反映其所屬的套件和檔案名稱。
例如,在提供的目錄結構中:
package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py
導入 moduleX 將為它指派名稱package.subpackage1.moduleX,而導入 moduleA 時會產生 package.moduleA 的名稱。但是,直接執行任一模組都會將其 name 設定為 __main__,從而抑制套件資訊。
相對導入
相對導入使用以下方式導覽包層次結構模組的名稱。例如, from .. import foo 表示在層次結構中向上移動。使用 from .. import 進行升序需要模組名稱中包含足夠的點。
非包裝模組
但是,名稱缺少點的模組不被視為模組的一部分一個包裹。因此,相對導入會因此類別模組中的非包錯誤而失敗。
解決方案
要解決該錯誤,請考慮以下解決方案:
以上是為什麼在 Python 中出現「嘗試在非套件中進行相對導入」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!