Bagaimana untuk membetulkan "Percubaan import relatif dibuat daripada bukan pakej walaupun terdapat ralat __init__.py"
P粉566048790
2023-08-21 15:15:11
<p>Saya cuba mengikuti PEP 328, menggunakan struktur direktori berikut: </p>
<pre class="brush:php;toolbar:false;">pkg/
__init__.py
komponen/
inti.py
__init__.py
ujian/
core_test.py
__init__.py</pre>
<p>Dalam <code>core_test.py</code>
<pre class="brush:php;toolbar:false;">from ..components.core import GameLoopEvents</pre>
<p>Walau bagaimanapun, apabila saya berlari, saya mendapat ralat berikut: </p>
<pre class="brush:php;toolbar:false;">tests$ python core_test.py
Traceback (panggilan terbaharu terakhir):
Fail "core_test.py", baris 3, dalam <modul>
daripada ..components.core import GameLoopEvents
ValueError: Percubaan import relatif dalam bukan pakej</pre>
<p>Saya mendapati "laluan relatif tidak berfungsi walaupun dengan __init__.py" dan "Import modul daripada laluan relatif" dalam carian saya, tetapi ia tidak membantu. </p>
<p>Adakah terdapat apa-apa yang saya hilang di sini? </p>
Untuk menghuraikan jawapan Ignacio Vazquez-Abrams:
Mekanisme import Python adalah relatif kepada fail semasa
__name__
。当直接执行一个文件时,它的名称不是通常的名称,而是使用"__main__"
sebagai nama. Oleh itu, import relatif tidak berfungsi.Seperti yang dicadangkan oleh Ignacio, anda boleh menggunakan atribut
-m
选项来执行它。如果你的包中有一部分是作为脚本运行的,你还可以使用__package__
untuk memberitahu nama fail yang sepatutnya ada dalam hierarki pakej.Lihat http://www.python.org/dev/peps/pep-0366/ untuk butiran.
Ya. Anda tidak menggunakannya sebagai pakej.