Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Membuang Ralat 'Import Relatif dalam Bukan Pakej' dan Bagaimana Saya Boleh Membetulkannya?
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:
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!