Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana Mengendalikan Import Relatif Di Luar Pakej Python?

Bagaimana Mengendalikan Import Relatif Di Luar Pakej Python?

Linda Hamilton
Lepaskan: 2024-12-12 22:24:17
asal
892 orang telah melayarinya

How to Handle Relative Imports Outside of Python Packages?

Mengendalikan Import Relatif dalam Konteks Bukan Pakej

Apabila cuba mengimport modul menggunakan laluan relatif dalam struktur direktori di luar Python pakej, seperti:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py
Salin selepas log masuk

Anda mungkin menghadapi masalah ralat:

ValueError: Attempted relative import in non-package
Salin selepas log masuk

Memahami Mekanisme Import Python

Mekanisme import Python bergantung pada atribut nama fail semasa untuk menentukan modul yang sesuai untuk diimport. Apabila melaksanakan fail secara langsung, ia diberikan nama "__main__", menjadikan import relatif mustahil.

Penyelesaian Kemungkinan

Untuk menyelesaikan masalah ini isu, anda boleh menggunakan salah satu kaedah berikut:

1. Menggunakan Pilihan -m

Anda boleh melaksanakan fail menggunakan pilihan -m, yang menambahkan fail ke sys.path sebagai modul:

python -m pkg.tests.core_test
Salin selepas log masuk

2 . Menentukan pakej Atribut

Jika anda mempunyai sebahagian daripada pakej anda yang direka khusus untuk dijalankan sebagai skrip, anda boleh menetapkan atribut pakej untuk menentukannya nama yang dikehendaki dalam pakej hierarki.

import sys

if __name__ == "__main__":
    sys.__package__ = "pkg.tests"

    from ..components.core import GameLoopEvents
Salin selepas log masuk

Rujukan:

Untuk maklumat lanjut, sila rujuk PEP 366: https://www.python.org/dev/peps/pep -0366/

Atas ialah kandungan terperinci Bagaimana Mengendalikan Import Relatif Di Luar Pakej 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