Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Import Relatif Python 3 Saya Gagal, dan Bagaimana Saya Boleh Membaikinya?

Mengapa Import Relatif Python 3 Saya Gagal, dan Bagaimana Saya Boleh Membaikinya?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 05:21:18284semak imbas

Why Are My Python 3 Relative Imports Failing, and How Can I Fix Them?

Import Relatif dalam Python 3: Pemahaman dan Penyelesaian

Import relatif, yang biasa digunakan untuk mengimport modul dalam direktori yang sama, kadangkala boleh membawa kepada ralat seperti ImportError atau ModuleNotFoundError. Memahami sebab asas adalah penting untuk menyelesaikan isu ini.

Gelagat Import Relatif dalam Python 3

Dalam Python 3, import relatif hanya berfungsi jika modul mengimport modul lain berada dalam pakej yang sama. Pakej ialah direktori yang mengandungi fail __init__.py, yang menunjukkan status pakejnya. Jika pakej mengandungi subdirektori dengan modul tambahan, import relatif daripada subdirektori tersebut kepada modul dalam subdirektori lain akan gagal.

Pemasukan Pakej Root

Untuk menyelesaikan isu ini, pastikan bahawa direktori induk modul yang terlibat ialah pakej, ditunjukkan dengan kehadiran fail __init__.py. Jika direktori induk bukan pakej, import relatif akan gagal dengan ralat "cuba import relatif tanpa pakej induk yang diketahui."

Ralat: "ModuleNotFoundError: Tiada modul bernama 'mymodule'"

Ralat ini berlaku apabila modul yang diimport (mymodule dalam kes ini) tidak wujud dalam laluan yang ditentukan. Sahkan bahawa modul itu wujud dan dinamakan dengan betul.

Ralat: "SystemError: Modul induk '' tidak dimuatkan, tidak boleh melakukan import relatif"

Ralat ini menunjukkan bahawa modul induk (yang mengandungi import relatif) belum dimuatkan. Pastikan modul induk sedang dilaksanakan atau diimport sebelum mencuba import relatif.

Penyelesaian untuk Import Relatif

Jika mengelakkan import relatif tidak dapat dilaksanakan, terdapat penyelesaian:

  • Gunakan Mutlak Import: Gantikan daripada .mymodule import myfunction dengan from mypackage.mymodule import myfunction, menggunakan laluan mutlak daripada pakej root.
  • Ubah suai PYTHONPATH: Tambah direktori induk pakej kepada pembolehubah persekitaran PYTHONPATH untuk menjadikannya tersedia untuk carian modul laluan.
  • Frob PYTHONPATH dalam Kod: Tambahkan direktori induk ke sys.path menggunakan coretan kod seperti yang disediakan dalam jawapan yang diberikan.

Berhati-hati Berkenaan Menjalankan Skrip dalam Pakej

Guido van Rossum, pencipta Python, menganggap menjalankan skrip dalam pakej sebagai antipattern dan melihatnya sebagai tidak perlu. Walau bagaimanapun, untuk senario di mana ini perlu, penyelesaian di atas boleh digunakan.

Atas ialah kandungan terperinci Mengapa Import Relatif Python 3 Saya Gagal, dan Bagaimana Saya Boleh Membaikinya?. 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