Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Import Relatif Gagal Apabila Menjalankan Skrip Python Secara Terus?

Mengapa Import Relatif Gagal Apabila Menjalankan Skrip Python Secara Terus?

Patricia Arquette
Lepaskan: 2024-12-22 12:43:11
asal
575 orang telah melayarinya

Why Do Relative Imports Fail When Running Python Scripts Directly?

Mengapa Import Relatif Gagal dalam Skrip Bukan Pakej

Definisi Masalah:

Apabila mencuba import relatif daripada fail Python dilaksanakan sebagai skrip peringkat teratas (cth., dengan menaip python myfile.py), ralat mesej ditemui: "Percubaan import relatif dalam bukan pakej."

Modul Pemahaman lwn. Skrip:

Perbezaan utama terletak pada cara Python mentafsir fail apabila dimuatkan. Apabila dijalankan terus sebagai skrip, fail mempunyai nama "__main__." Apabila diimport sebagai modul daripada fail lain, namanya menggambarkan struktur pakejnya (cth., "package.subpackage.module").

Sekatan Import Relatif:

Relatif import bergantung pada nama penuh modul untuk menentukan kedudukannya dalam hierarki pakej. Jika nama modul tidak mengandungi maklumat pakej (mis., "__main__"), import relatif gagal kerana modul tidak dianggap sebagai sebahagian daripada pakej.

Penjelasan Ralat:

Apabila nama penuh modul kekurangan titik, menunjukkan tiada perkaitan pakej, Python mentafsirkannya sebagai skrip kendiri, dan import relatif menjadi tidak sah. Ralat ini berlaku apabila:

  1. Mencuba import relatif dalam fail yang dilaksanakan secara langsung sebagai skrip tanpa pilihan "-m".
  2. Mengimport fail daripada direktori semasa tempat penterjemah Python sedang berjalan, yang boleh membawa kepada Python mengenal pasti modul sebagai sebelum waktunya berdiri sendiri.

Penyelesaian:

  1. Laksanakan Skrip sebagai Modul: Gunakan python -m package.subpackage.moduleX untuk memuatkan skrip sebagai modul, mengekalkan perkaitan pakejnya dan mendayakan relatif import.
  2. Skrip dan Modul Asingkan: Alihkan skrip ke direktori lain di luar pakej dan importnya dari sana, membenarkan import relatif berfungsi.

Nota Tambahan:

  • Direktori pakej hendaklah disertakan dalam Python laluan carian modul (sys.path) untuk akses yang boleh dipercayai kepada kandungannya.
  • Bermula daripada Python 2.6, "nama" modul dipengaruhi oleh kedua-dua nama dan pakej atribut.

Atas ialah kandungan terperinci Mengapa Import Relatif Gagal Apabila Menjalankan Skrip Python Secara Terus?. 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