Bayangkan struktur direktori berikut:
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
Untuk mengimport sesuatu daripada mod2 dalam modul mod1, kod berikut ialah percubaan:
from ..sub2 import mod2
Walau bagaimanapun, ini mengakibatkan ralat: "Percubaan import relatif dalam bukan pakej."
Ralat berlaku kerana dengan menjalankan modul sebagai __main__ dengan menghantar hujah mod1.py kepada penterjemah, Python menganggapnya sebagai modul peringkat atas, mengabaikan pakej maklumat.
Untuk menyelesaikan isu ini, fail __init__.py mesti dimulakan dengan betul dalam kedua-dua direktori sub1 dan sub2. Ini menandakan bahawa direktori ini sememangnya pakej dan kami boleh mengimport merentasnya menggunakan import relatif.
Dengan fail __init__.py tersedia, kod berikut akan berjaya mengimport mod2 dalam mod1:
from ..sub2 import mod2
PEP 366 mencadangkan mekanisme untuk rujukan modul berbanding dengan modul utama. Dalam Python 2.6 dan versi yang lebih baru, anda boleh mengimport modul berbanding modul utama menggunakan sintaks berikut:
from . import mod2 from .. import sub2
Tingkah laku ini sejajar dengan kefungsian yang dijangkakan untuk import subpakej, memastikan mekanisme import yang konsisten dan intuitif.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Ralat 'Percubaan Import Relatif dalam Bukan Pakej' dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!