Apabila berurusan dengan import Python, menghadapi isu import pakej adik beradik boleh mengecewakan. Mari kita terokai alternatif kepada penggodaman sys.path.insert yang digeruni untuk menyelesaikan isu ini.
Pertimbangkan struktur projek berikut:
├── LICENSE.md ├── README.md ├── api │ ├── __init__.py │ ├── api.py │ └── api_key.py ├── examples │ ├── __init__.py │ ├── example_one.py │ └── example_two.py └── tests │ ├── __init__.py │ └── test_one.py
Apabila anda cuba mengimport daripada modul api dalam direktori contoh dan ujian, anda mungkin menghadapi ralat seperti:
ModuleNotFoundError: No module named 'api'
Daripada menggunakan sys.path hacks, berikut ialah Pythonic penyelesaian:
Langkah 1: Cipta Fail pyproject.toml
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"
Langkah 2: Pasang dengan pip -e
Aktifkan persekitaran maya anda jika perlu, kemudian pasang projek anda dalam boleh diedit nyatakan:
pip install -e .
Langkah 3: Laraskan Import
Ubah suai import dalam fail yang sebelum ini tidak dapat mengimport daripada modul api untuk memasukkan nama projek, cth.:
from myproject.api.api import function_from_api
a pi.py
def function_from_api(): return 'I am the return value from api.api!'
test_one.py
from myproject.api.api import function_from_api def test_function(): print(function_from_api()) if __name__ == '__main__': test_function()
Berlari Ujian
Pastikan anda masih berada dalam persekitaran maya anda dan laksanakan perkara berikut:
python .\myproject\tests\test_one.py
Output:
I am the return value from api.api!
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Peretasan `sys.path` Apabila Mengimport Pakej Adik Beradik dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!