Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengelakkan Ralat 'Percubaan Import Relatif dalam Bukan Pakej' dalam Python?

Bagaimanakah Saya Boleh Mengelakkan Ralat 'Percubaan Import Relatif dalam Bukan Pakej' dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-12-22 04:40:14624semak imbas

How Can I Avoid the

Import Relatif dalam Python

Memahami import relatif dalam Python adalah penting untuk mengelakkan ralat "Percubaan import relatif dalam bukan pakej".

Skrip lwn. Modul

A perbezaan utama timbul daripada kaedah memuatkan fail Python. Apabila dilaksanakan secara langsung sebagai skrip, namanya ditetapkan kepada __main__. Sebaliknya, jika ia diimport, namanya termasuk maklumat pakej.

Konvensyen Penamaan

Sebagai contoh, jika moduleX dalam package/subpackage1/moduleX.py diimport, namanya menjadi package.subpackage1.moduleX. Walau bagaimanapun, jika dijalankan secara langsung, namanya ialah __main__.

Import Relatif

Import relatif bergantung pada nama modul untuk menentukan hierarki pakejnya. Modul dengan nama yang tidak mengandungi titik tidak dilihat sebagai sebahagian daripada pakej.

Punca Ralat

Ralat berlaku apabila import relatif dicuba dalam modul yang namanya menunjukkan ia' tidak dalam pakej (iaitu, nama mereka tidak mempunyai titik). Ini termasuk skrip (memandangkan utama tidak mempunyai titik) dan modul dimuatkan terus dari direktori semasa (di mana Python menambah direktori semasa pada laluan cariannya).

Penyelesaian

  • Laksanakan sebagai Modul: Gunakan python -m package.subpackage1.moduleX untuk menjalankan moduleX sebagai modul, membenarkan import relatif.
  • Tempat Lain: Alihkan sebarang skrip menggunakan moduleX ke lokasi di luar direktori pakej, membolehkan import relatif dalam mereka skrip.

Nota

  • Direktori pakej mesti boleh diakses dalam laluan carian Python.
  • Dalam Python 2.6 , pakej juga mempengaruhi resolusi pakej untuk modul.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Ralat 'Percubaan Import Relatif dalam Bukan Pakej' dalam Python?. 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