cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk membetulkan "Percubaan import relatif dibuat daripada bukan pakej walaupun terdapat ralat __init__.py"

<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粉566048790P粉566048790465 hari yang lalu492

membalas semua(2)saya akan balas

  • P粉827121558

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

    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.

    balas
    0
  • P粉604507867

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

    Ya. Anda tidak menggunakannya sebagai pakej.

    python -m pkg.tests.core_test

    balas
    0
  • Batalbalas