Python 中的相對導入
在 Python 中,從包內導入模組可能是一項棘手的任務。考慮以下目錄結構:
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
假設您正在處理 mod1.py 並需要從 mod2.py 匯入某些內容。您可以嘗試:
from ..sub2 import mod2
但是,這會導致「嘗試在非套件中進行相對導入」錯誤。解決方案在於,Python 將作為 __main__ 運行的模組(例如 python mod1.py)解釋為頂級模組,無論其檔案系統位置如何。
要啟用相對導入,導入模組不得以 __main__ 運作。這可以透過以套件作為主模組來執行解釋器來完成:
python -m app.sub1.mod1
或者,您可以使用__package__ 屬性手動指定父包:
import sys sys.path.insert(0, '..') from sub2.mod2 import MyClass
這方法作業系統路徑,但它不需要將模組作為__main__ 運行。
但是,對於要在其中工作的相對導入子包中,確保每個目錄中存在 __init__.py 檔案非常重要。這些檔案充當套件標記,並使 __package__ 屬性能夠引用包含的套件。
以上是如何在 Python 套件中成功執行相對導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!