相對導入錯誤:超出頂級包
在Python 3 中,相對導入提供了一種便捷的方式來引用同一包中的模組目錄或包。但是,遇到“ValueError:嘗試相對導入超出頂級包”錯誤可能會令人困惑。
考慮以下套件結構:
package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py
當嘗試從子套件(例如,from ..A import foo in test.py),如果滿足以下條件,則可能會遇到上述錯誤滿足:
原因這個錯誤源自於 Python 導入機制的一個基本面向。當載入包時,它被視為“頂級包”,並且相對導入只能引用該包或其子包內的模組。但是,當直接運行模組時,Python 不會自動將套件的父目錄識別為套件。
因此,在上述場景中,當您從套件目錄中執行python -m test_A.test 時,父目錄目錄('package/') 不被視為包,並且來自..A import foo的相對導入有效地嘗試超越頂級包。
要解決此錯誤,請確保您在執行模組時指定整個套件路徑:
python -m package.test_A.test
以上是為什麼我在 Python 中收到「ValueError:嘗試相對導入超出頂級套件」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!