Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich „sys.path'-Hacks beim Importieren von Geschwisterpaketen in Python vermeiden?
Beim Umgang mit Python-Importen kann es frustrierend sein, auf Probleme beim Importieren von Geschwisterpaketen zu stoßen. Lassen Sie uns eine Alternative zum gefürchteten sys.path.insert-Hack erkunden, um dieses Problem zu beheben.
Bedenken Sie die folgende Projektstruktur:
├── 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
Wenn Sie versuchen, aus dem API-Modul innerhalb der Beispiel- und Testverzeichnisse zu importieren, kann ein Fehler wie der folgende auftreten:
ModuleNotFoundError: No module named 'api'
Anstatt auf sys.path-Hacks zurückzugreifen, ist hier ein Pythonic Lösung:
Schritt 1: Erstellen Sie eine pyproject.toml-Datei
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"
Schritt 2: Installieren Sie mit pip -e
Aktivieren Sie bei Bedarf Ihre virtuelle Umgebung und installieren Sie dann Ihr Projekt bearbeitbar Status:
pip install -e .
Schritt 3: Importe anpassen
Ändern Sie die Importe in Dateien, die zuvor nicht aus dem API-Modul importiert werden konnten, um den Projektnamen einzuschließen. z.B.:
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()
Running der Test
Stellen Sie sicher, dass Sie sich noch in Ihrer virtuellen Umgebung befinden und führen Sie Folgendes aus:
python .\myproject\tests\test_one.py
Ausgabe:
I am the return value from api.api!
Das obige ist der detaillierte Inhalt vonWie kann ich „sys.path'-Hacks beim Importieren von Geschwisterpaketen in Python vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!