首頁 >後端開發 >Python教學 >為什麼我的 Python 3 相對導入失敗,如何修復它們?

為什麼我的 Python 3 相對導入失敗,如何修復它們?

Linda Hamilton
Linda Hamilton原創
2024-12-25 05:21:18281瀏覽

Why Are My Python 3 Relative Imports Failing, and How Can I Fix Them?

Python 3 中的相對導入:理解與解決方法

相對導入,通常用於在同一目錄中導入模組,有時會導致錯誤,例如ImportError 或ModuleNotFoundError。了解根本原因對於解決這些問題至關重要。

Python 3 中的相對導入行為

在 Python 3 中,相對導入僅在模組導入其他模組時才起作用位於同一個包內。包是包含 __init__.py 檔案的目錄,指示其包狀態。如果套件中包含帶有其他模組的子目錄,從這些子目錄到其他子目錄中的模組的相對導入將會失敗。

根包包含

要解決此問題,請確保所涉及模組的父目錄是一個包,由 __init__.py 文件的存在表明。如果父目錄不是包,則相對導入將失敗,並顯示錯誤「嘗試在沒有已知父包的情況下進行相對導入。」

錯誤:"ModuleNotFoundError:沒有名為'mymodule ' 的模組”

當指定路徑中不存在正在導入的模組(本例中為mymodule)時,會發生此錯誤。驗證模組是否存在且命名正確。

錯誤:「SystemError: 父模組 '' 未加載,無法執行相對導入」

此錯誤表明父模組(包含相對導入的模組)尚未加載。在嘗試相對導入之前,請確保父模組正在執行或導入。

相對導入的解決方法

如果避免相對導入不可行,可以使用以下解決方法:

  • 使用絕對導入: 替換from .mymodule import myfunction with from mypackage.mymodule import myfunction,使用根包的絕對路徑。
  • 修改 PYTHONPATH: 將套件的父目錄加入 PYTHONPATH 環境變數中,使其可供模組搜尋路徑。
  • Frob PYTHONPATH in Code: 將父目錄追加到sys.path 使用類似於給定答案中提供的程式碼片段。

關於在套件中執行腳本的警告

Guido van Rossum,的創建者Python 認為在套件中運行腳本是一種反模式,並將其視為不必要的。不過,對於有必要的場景,可以採用上述解決方法。

以上是為什麼我的 Python 3 相對導入失敗,如何修復它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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