修正「即使有__init__.py,也出現了非套件中的相對導入嘗試」錯誤的方法
P粉566048790
2023-08-21 15:15:11
<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>
對於 Ignacio Vazquez-Abrams 的回答進行詳細說明:
Python的導入機制是相對於目前檔案的
__name__
#。當直接執行一個檔案時,它的名稱不是通常的名稱,而是使用"__main__"
作為名稱。因此,相對導入不起作用。正如Ignacio所建議的那樣,你可以使用
-m
選項來執行它。如果你的套件中有一部分是作為腳本運行的,你也可以使用__package__
屬性來告訴該檔案在套件層次結構中應該有什麼名稱。詳細資訊請參閱http://www.python.org/dev/peps/pep-0366/。
是的。你沒有將它作為一個包使用。