首頁 >後端開發 >Python教學 >如何解決Python中的「嘗試在非套件中進行相對導入」錯誤?

如何解決Python中的「嘗試在非套件中進行相對導入」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-24 02:21:15204瀏覽

How Can I Solve

Python 中的相對導入:綜合指南

問題:跨子包導入模組

想像以下目錄結構:

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

PEP 366 提出了一種相對於引用模組的機制主模組。在 Python 2.6 及更高版本中,您可以使用以下語法導入相對於主模組的模組:

from . import mod2
from .. import sub2

此行為與子包導入的預期功能一致,確保一致且直觀的導入機制。

以上是如何解決Python中的「嘗試在非套件中進行相對導入」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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