Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich „sys.path'-Hacks beim Importieren von Geschwisterpaketen in Python vermeiden?

Wie kann ich „sys.path'-Hacks beim Importieren von Geschwisterpaketen in Python vermeiden?

Patricia Arquette
Freigeben: 2024-12-11 13:56:10
Original
135 Leute haben es durchsucht

How Can I Avoid `sys.path` Hacks When Importing Sibling Packages in Python?

Importe von Geschwisterpaketen: Ein schmerzloser Ansatz

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.

Projekteinrichtung

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
Nach dem Login kopieren

Die Problem

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'
Nach dem Login kopieren

Die Lösung< /h2>

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"
Nach dem Login kopieren

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 .
Nach dem Login kopieren

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
Nach dem Login kopieren

Beispiel

a pi.py

def function_from_api():
    return 'I am the return value from api.api!'
Nach dem Login kopieren

test_one.py

from myproject.api.api import function_from_api

def test_function():
    print(function_from_api())

if __name__ == '__main__':
    test_function()
Nach dem Login kopieren

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
Nach dem Login kopieren

Ausgabe:

I am the return value from api.api!
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage