Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich den Fehler „ImportError: No Module Named…' beheben, wenn ich pytest mit einer hierarchischen Projektstruktur verwende?

Wie kann ich den Fehler „ImportError: No Module Named…' beheben, wenn ich pytest mit einer hierarchischen Projektstruktur verwende?

DDD
Freigeben: 2024-12-01 09:31:14
Original
860 Leute haben es durchsucht

How Can I Fix

PATH-Probleme für Pytest mit Modulimportfehlern lösen

Wenn Sie Pytest zum Ausführen von Tests für ein Projekt mit einer hierarchischen Dateistruktur verwenden, können Sie dies tun Beim Importieren von Modulen aus dem Pfad Ihrer Anwendung treten Fehler vom Typ „ImportError: Kein Modul namens ...“ auf. Dieses Problem ergibt sich aus der Notwendigkeit, den sys.path zu ändern, um die Pfade zu den erforderlichen Modulen einzuschließen.

Empfohlener Ansatz für pytest >= 7: pythonpath Setting

Pytest-Versionen ab 7 bieten eine vereinfachte Lösung unter Verwendung des Pythonpath-Konfigurationswerts. Dadurch können Sie bestimmte Pfade zu sys.path hinzufügen, ohne dass Workarounds erforderlich sind. In Ihrer Konfigurationsdatei (pyproject.toml oder pytest.ini) können Sie die Pfade angeben, die Sie einschließen möchten, wie zum Beispiel:

[tool.pytest.ini_options]
pythonpath = [
  "."
]
Nach dem Login kopieren
[pytest]
pythonpath = .
Nach dem Login kopieren

Originalantwort für pytest < 7: conftest-Lösung

Wenn Sie eine ältere Version von pytest (weniger als 7) verwenden, können Sie die leere conftest.py-Lösung verwenden. Dazu muss eine leere Datei conftest.py im Stammverzeichnis des Projekts erstellt werden. Dadurch wird pytest veranlasst, das übergeordnete Verzeichnis der Datei conftest.py automatisch zu sys.path hinzuzufügen, wodurch die Importprobleme behoben werden.

Erklärung

Pytest sucht währenddessen nach conftest-Modulen Testsammlung, um kundenspezifische Haken und Vorrichtungen zu sammeln. Um benutzerdefinierte Objekte aus diesen Modulen zu importieren, fügt pytest das übergeordnete Verzeichnis von conftest.py zu sys.path hinzu.

Alternative Lösungen

Es gibt je nach Bedarf zusätzliche Lösungen für dieses Problem auf Ihrer Projektstruktur:

  • Paket-Stammverzeichnis: Platzieren Sie das conftest.py-Datei im Paketstammverzeichnis, die Unterpakete enthält, aber selbst kein Paket ist (ohne eine __init__.py-Datei).
  • src-Layout: Obwohl die Verwendung mit src möglich ist Layout: Wenn Sie conftest.py im src-Verzeichnis platzieren, werden die Vorteile des src-Layouts möglicherweise zunichte gemacht. Erwägen Sie stattdessen, es im Stammverzeichnis des Pakets abzulegen.

Fazit

Durch Anpassen von sys.path oder Verwenden der conftest.py-Lösung können Sie das Problem beheben „ImportError: Kein Modul namens ...“-Fehler und stellen Sie eine erfolgreiche Testausführung in Ihrer Pytest-Umgebung sicher.

Das obige ist der detaillierte Inhalt vonWie kann ich den Fehler „ImportError: No Module Named…' beheben, wenn ich pytest mit einer hierarchischen Projektstruktur verwende?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage