Bagaimana untuk membetulkan "Percubaan import relatif dibuat daripada bukan pakej walaupun terdapat ralat __init__.py"
P粉566048790
P粉566048790 2023-08-21 15:15:11
0
2
513
<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>
P粉566048790
P粉566048790

membalas semua(2)
P粉827121558

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.

P粉604507867

Ya. Anda tidak menggunakannya sebagai pakej.

python -m pkg.tests.core_test
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan