Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej' dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2024-12-24 21:41:14523semak imbas

Why Does Python Throw a

Import Relatif: Penyelaman Lebih Dalam

Dalam dunia pengaturcaraan Python, import relatif merupakan punca kekeliruan yang biasa. Artikel ini menyelidiki selok-belok import relatif, menangani mesej ralat "Percubaan import relatif dalam bukan pakej" di mana-mana.

Perbezaan Skrip vs. Modul

Pemahaman perbezaan asas antara skrip dan modul adalah penting. Apabila anda terus melaksanakan fail Python, ia menjadi skrip dan diberi nama __main__. Sebaliknya, apabila fail diimport, ia menjadi modul dengan nama yang merangkumi kedudukannya dalam hierarki pakej.

Penamaan Modul

Nama yang diberikan kepada modul bergantung pada sama ada ia diimport daripada pakej atau terus daripada direktorinya. Jika modul diimport daripada pakej, namanya mengikut laluan pakej yang dipisahkan titik dan subpakej yang mengandunginya (cth., package.subpackage1.moduleA). Walau bagaimanapun, jika modul diimport terus daripada direktorinya, namanya hanya akan menjadi nama modul (mis., modulA).

Import dan Pakej Relatif

Import relatif bergantung pada nama modul untuk menentukan kedudukannya dalam hierarki pakej. Jika nama modul tidak mengandungi sebarang titik, ia tidak dianggap sebagai sebahagian daripada pakej. Ini bermakna import relatif yang cuba melintasi di luar direktori semasa modul akan gagal dengan ralat "import-relatif dalam bukan pakej".

Menyelesaikan Ralat

Kepada selesaikan ralat ini, pertimbangkan penyelesaian berikut:

  1. Gunakan -m Pilihan: Awalan perintah yang digunakan untuk menjalankan skrip dengan -m, yang menunjukkan bahawa ia harus dianggap sebagai modul, bukan skrip. Contoh: python -m package.subpackage1.moduleX
  2. Alihkan Skrip Keluar dari Direktori Pakej: Cipta direktori berasingan untuk menjalankan skrip dan import modul daripada pakej ke dalam skrip tersebut. Ini memastikan skrip dimuatkan sebagai skrip dengan nama utama, membenarkan import relatif berfungsi dengan betul.

Perlu diingat bahawa direktori pakej mesti disertakan dalam Python laluan carian modul (sys.path) untuk penyelesaian ini berfungsi. Selain itu, bermula dengan Python 2.6, modul mempunyai kedua-dua atribut nama dan pakej yang mempengaruhi nama berkesannya.

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

Kenyataan:
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