Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej'?

Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej'?

Susan Sarandon
Lepaskan: 2024-12-23 16:31:10
asal
369 orang telah melayarinya

Why Does Python Throw a

Import Relatif dalam Python: Memahami Ralat "Bukan Pakej"

Isu di mana-mana "Percubaan import relatif dalam bukan pakej" berpunca daripada salah faham perbezaan antara skrip dan modul dan tingkah laku masing-masing semasa import.

Skrip lwn. Modul

Apabila fail Python dilaksanakan secara langsung, ia bertindak sebagai skrip peringkat atas dan diberi nama "__main__." Apabila diimport, nama fail menjadi nama pakej diikuti dengan nama fail, dipisahkan dengan titik.

Import dan Pakej Relatif

Import relatif menggunakan nama modul untuk mencarinya kedudukan dalam hierarki pakej. Walau bagaimanapun, jika nama modul tidak mengandungi maklumat pakej (cth., "__main__"), import relatif diselesaikan seolah-olah ia adalah modul peringkat atas, tanpa mengira lokasi fail sebenar.

The Ralat "Bukan Pakej"

Ralat berlaku apabila import relatif dicuba dalam modul yang tidak diiktiraf sebagai sebahagian daripada pakej. Ini boleh berlaku apabila nama modul tidak mempunyai titik, yang menunjukkan status bukan pakejnya.

Penyelesaian

Untuk menyelesaikan ralat, pertimbangkan pendekatan berikut:

  • Menggunakan Suis -m:
    Untuk melaksanakan modul sebagai modul (bukan skrip), gunakan sintaks "python -m package.subpackage1.moduleX."
  • Pindahkan Skrip:
    Buat skrip berasingan yang menggunakan modul yang diingini, dan jalankan skrip itu dari luar direktori pakej. Ini mengelakkan pemberian "__main__" kepada nama modul dan membenarkan import relatif.

Nota Tambahan:

  • Pastikan direktori pakej boleh diakses dalam laluan carian modul (sys.path).
  • Dari Python 2.6 dan seterusnya, "nama" modul untuk resolusi pakej termasuk atribut pakej dan nama.

Atas ialah kandungan terperinci Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan