Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Import Relatif Gagal dalam Python Apabila Modul Dijalankan sebagai `__main__`?

Mengapa Import Relatif Gagal dalam Python Apabila Modul Dijalankan sebagai `__main__`?

DDD
Lepaskan: 2024-12-19 06:43:10
asal
372 orang telah melayarinya

Why Do Relative Imports Fail in Python When a Module is Run as `__main__`?

Import Relatif dalam Python: Penjelasan Terperinci

Apabila bekerja dengan direktori berstruktur yang mengandungi berbilang subpakej, mengimport modul daripada subpakej lain boleh menjadi keperluan biasa. Walau bagaimanapun, pendekatan standard menggunakan import relatif, seperti daripada ..sub2 import mod2, mungkin gagal dalam senario tertentu.

Begitulah keadaannya bagi pembangun yang cuba mengimport mod2 daripada mod1, dalam struktur direktori yang disediakan dalam soalan. Mesej ralat "Percubaan import relatif dalam bukan pakej" menunjukkan masalah dengan import relatif.

Punca isu terletak pada fakta bahawa modul sedang dijalankan sebagai __main__ dengan menghantarnya sebagai hujah kepada jurubahasa. Menurut PEP 328, import relatif menggunakan atribut __name__ modul untuk menentukan kedudukannya dalam hierarki pakej. Apabila nama modul ditetapkan kepada __main__, import relatif diselesaikan seolah-olah modul adalah modul peringkat tertinggi, tanpa mengira lokasi sebenar dalam sistem fail.

Tingkah laku ini boleh menyebabkan kekeliruan apabila cuba mengimport modul daripada subpakej lain. Untuk menyelesaikan isu ini, adalah disyorkan untuk meletakkan kod dalam skrip dan mengimport subpakej yang berkaitan secara eksplisit menggunakan import mutlak, seperti import sub2.mod2.

Dalam Python 2.6 dan kemudian, bagaimanapun, keupayaan untuk merujuk modul berbanding dengan modul utama diperkenalkan. PEP 366 menerangkan perubahan ini. Untuk menggunakan import relatif dengan berkesan, adalah penting untuk merujuk modul utama dan bukannya menggunakan __main__. Ini boleh dicapai dalam pelbagai cara, seperti:

  • __init__.py boleh mengisytiharkan atribut __package__ untuk memberikan nama kepada pakej yang mengandungi.
  • Menggunakan kaedah __import__() untuk import subpakej dan tetapkan ia kepada pembolehubah.
  • Menggunakan modul pemegang tempat __init__.py untuk mengisytiharkan atribut __path__ dan __package__, walaupun modul itu kosong.

Dengan menggunakan teknik ini, pembangun boleh menggunakan import relatif secara berkesan untuk mengatur projek Python mereka dan mengurus kebergantungan antara modul secara berstruktur.

Atas ialah kandungan terperinci Mengapa Import Relatif Gagal dalam Python Apabila Modul Dijalankan sebagai `__main__`?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan