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
Patricia ArquetteOriginal
2024-12-11 13:56:10145Durchsuche

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

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'

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"

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

Beispiel

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!

Stellungnahme:
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