想像以下目錄結構:
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
要從mod1 模組中的mod2導入某些內容,以下程式碼是嘗試:
from ..sub2 import mod2
但是,這會導致錯誤:「嘗試在非套件中進行相對導入。」
發生錯誤的原因是透過將mod1.py 參數傳遞給解釋器來運行模組作為__main__ ,Python將其視為頂層模組,忽略套件
要解決此問題,必須在 sub1 和 sub2 目錄中正確初始化 __init__.py 檔案。這意味著這些目錄確實是包,我們可以使用相對導入來導入它們。
有了__init__.py 文件,以下程式碼將成功在mod1 中導入mod2:
from ..sub2 import mod2
PEP 366 提出了一種相對於引用模組的機制主模組。在 Python 2.6 及更高版本中,您可以使用以下語法導入相對於主模組的模組:
from . import mod2 from .. import sub2
此行為與子包導入的預期功能一致,確保一致且直觀的導入機制。
以上是如何解決Python中的「嘗試在非套件中進行相對導入」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!