Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Saya Mendapat 'ImportError' Apabila Menggunakan Import Relatif dalam Python 3?

Mengapa Saya Mendapat 'ImportError' Apabila Menggunakan Import Relatif dalam Python 3?

Mary-Kate Olsen
Lepaskan: 2024-12-30 05:39:09
asal
982 orang telah melayarinya

Why Do I Get

Import Relatif dalam Python 3: Membongkar Misteri

Import relatif menyediakan cara yang mudah untuk mengimport modul dari dalam direktori yang sama. Walau bagaimanapun, dalam kes tertentu, ia mungkin membawa kepada ralat berikut:

  • "ImportError: percubaan import relatif tanpa pakej induk yang diketahui"
  • "ModuleNotFoundError: Tiada modul dinamakan 'module_name'"
  • "SystemError: Modul induk '' tidak dimuatkan, tidak dapat melaksanakan import relatif"

Untuk memahami ralat ini, mari analisa struktur direktori biasa:

main.py
mypackage/
    __init__.py
    mymodule.py
    myothermodule.py
Salin selepas log masuk

Dalam kes ini, import relatif "daripada .mymodule import myfunction" dalam "myothermodule.py" akan gagal kerana "mymodule.py" tidak kelihatan dalam laluan carian modul. Ini disebabkan oleh mekanisme resolusi modul Python, yang bergantung pada pembolehubah sys.path.

Satu penyelesaian ialah menggunakan import mutlak dan bukannya import relatif:

from mypackage.mymodule import myfunction
Salin selepas log masuk

Ini memastikan bahawa Python mencari "mymodule" dalam laluan modul "mypackage", yang diandaikan berada dalam sys.path.

Walau bagaimanapun, jika anda ingin mengekalkan kemudahan import relatif sambil membenarkan modul dijalankan sebagai skrip, pertimbangkan perkara berikut:

  • Prepend induk direktori ke sys.path:
import sys
import os

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(SCRIPT_DIR))

from mypackage.mymodule import myfunction
Salin selepas log masuk
  • Gunakan pilihan -m semasa menjalankan skrip:
python3 -m mypackage.myothermodule
Salin selepas log masuk

Ini pendekatan membolehkan modul ditemui dalam sistem modul Python dan bukannya dalam sistem fail.

Kesimpulannya, mesej ralat yang ditemui dalam import relatif berpunca daripada mekanisme resolusi modul Python. Dengan memahami peranan sys.path dan menggunakan strategi yang berbeza, anda boleh menyelesaikan ralat ini dan memastikan import lancar dalam aplikasi Python anda.

Atas ialah kandungan terperinci Mengapa Saya Mendapat 'ImportError' Apabila Menggunakan Import Relatif dalam Python 3?. 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