Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Saya Mendapat 'Percubaan import relatif dalam bukan pakej' dalam Python?

Mengapa Saya Mendapat 'Percubaan import relatif dalam bukan pakej' dalam Python?

Mary-Kate Olsen
Lepaskan: 2024-12-21 13:31:09
asal
880 orang telah melayarinya

Why Do I Get

Import Relatif Dalam Python

Ralat biasa, "Percubaan import relatif dalam bukan pakej," sering timbul apabila bekerja dengan import relatif dalam Ular sawa. Artikel ini bertujuan untuk menjelaskan konsep import relatif dan menyediakan penyelesaian untuk menangani ralat ini.

Perbezaan Antara Skrip dan Modul

Perbezaan utama terletak pada cara fail Python dimuatkan. Fail yang dilaksanakan secara langsung menggunakan python myfile.py dianggap sebagai skrip peringkat atasan. Sebaliknya, fail yang diimport menggunakan pernyataan import dalam fail lain ialah modul. Perbezaan ini menjadi penting untuk memahami import relatif.

Kepentingan Penamaan

Setelah dimuatkan, setiap fail diberi nama yang disimpan dalam atribut nama . Jika dimuatkan sebagai skrip, namanya ditetapkan kepada __main__. Jika diimport sebagai modul, namanya mencerminkan kedua-dua pakej yang dimiliki dan nama fail.

Contohnya, dalam struktur direktori yang disediakan:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py
Salin selepas log masuk

Mengimport moduleX akan memberikannya nama package.subpackage1.moduleX, semasa mengimport moduleA menghasilkan nama package.moduleA. Walau bagaimanapun, melaksanakan mana-mana modul secara langsung akan menetapkan nama mereka kepada __main__, menyekat maklumat pakej.

Import Relatif

Import relatif menavigasi hierarki pakej menggunakan nama modul. Sebagai contoh, dari .. import foo menunjukkan pergerakan ke atas hierarki. Menggunakan dari .. import untuk naik memerlukan nama modul yang mengandungi titik yang mencukupi.

Modul Bukan Pakej

Walau bagaimanapun, modul dengan nama yang tidak mempunyai titik tidak dianggap sebagai sebahagian daripada satu pakej. Oleh itu, import relatif gagal dengan ralat bukan pakej dalam modul tersebut.

Penyelesaian

Untuk menyelesaikan ralat, pertimbangkan penyelesaian berikut:

  1. Laksanakan Modul sebagai Pakej: Gunakan python -m package.subpackage1.moduleX untuk muatkan modul tanpa melaksanakannya sebagai skrip.
  2. Pelaksanaan Asingkan daripada Import: Jalankan skrip di luar direktori pakej dan import modul dari dalamnya untuk mendayakan import relatif.

Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Percubaan import relatif dalam bukan pakej' dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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