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!