搜尋

首頁  >  問答  >  主體

修正「即使有__init__.py,也出現了非套件中的相對導入嘗試」錯誤的方法

<p>我正在嘗試遵循PEP 328,使用以下目錄結構:</p> <pre class="brush:php;toolbar:false;">pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py</pre> <p>在<code>core_test.py</code>中,我有以下導入語句</p> <pre class="brush:php;toolbar:false;">from ..components.core import GameLoopEvents</pre> <p>然而,當我運行時,我得到以下錯誤:</p> <pre class="brush:php;toolbar:false;">tests$ python core_test.py Traceback (most recent call last): File "core_test.py", line 3, in <module> from ..components.core import GameLoopEvents ValueError: Attempted relative import in non-package</pre> <p>我在搜尋中找到了"relative path not working even with __init__.py"和"Import a module from a relative path",但它們沒有幫助。 </p> <p>這裡有什麼我遺漏的嗎? </p>
P粉566048790P粉566048790466 天前494

全部回覆(2)我來回復

  • P粉827121558

    P粉8271215582023-08-22 14:11:27

    對於 Ignacio Vazquez-Abrams 的回答進行詳細說明:

    Python的導入機制是相對於目前檔案的__name__#。當直接執行一個檔案時,它的名稱不是通常的名稱,而是使用"__main__"作為名稱。因此,相對導入不起作用。

    正如Ignacio所建議的那樣,你可以使用-m選項來執行它。如果你的套件中有一部分是作為腳本運行的,你也可以使用__package__屬性來告訴該檔案在套件層次結構中應該有什麼名稱。

    詳細資訊請參閱http://www.python.org/dev/peps/pep-0366/

    回覆
    0
  • P粉604507867

    P粉6045078672023-08-22 09:39:36

    是的。你沒有將它作為一個包使用。

    python -m pkg.tests.core_test

    回覆
    0
  • 取消回覆