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

Bagaimana Mengendalikan Import Relatif Di Luar Pakej Python?

Linda Hamilton
Linda Hamiltonasal
2024-12-12 22:24:17893semak imbas

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

Anda mungkin menghadapi masalah ralat:

ValueError: Attempted relative import in non-package

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

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

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!

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