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

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

Barbara Streisand
Lepaskan: 2024-12-24 02:21:15
asal
208 orang telah melayarinya

How Can I Solve

Import Relatif dalam Python: Panduan Komprehensif

Isu: Mengimport Modul Merentasi Subpakej

Bayangkan struktur direktori berikut:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Salin selepas log masuk

Untuk mengimport sesuatu daripada mod2 dalam modul mod1, kod berikut ialah percubaan:

from ..sub2 import mod2
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, ini mengakibatkan ralat: "Percubaan import relatif dalam bukan pakej."

Penyelesaian: Pakej Diisytiharkan

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
Salin selepas log masuk
Salin selepas log masuk

Import Relatif dan PEP 366

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
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan