PYTHONPATH wird nicht aktualisiert

PYTHONPATH wird nicht aktualisiert

Derzeit habe ich pyenveine bestimmte pythonVersion installiert. Dann pipenverstelle ich virtuelle Umgebungen für meine verschiedenen Projekte in python.

Derzeit habe ich eine Projektstruktur ähnlich der:

foo/
  src/app.py
  src/__init__.py
  tests/unit/test_app.py
  tests/unit/__init_.py

Es gibt eine beliebige Anzahl von Tests, test_app.pydie Folgendes importieren app.py:

import src.app

Ich habe zwei Probleme:

  • Code-Editoren wie oder emacsbeschweren sich über diese Klausel aus den Tests, markieren sie rot und nennen sie „mäßig“ störend.vimvscodeimport
  • Von den Texteditoren aus rufe ich pipenv run pytestdie Tests auf. Es schlägt fehl, weil srces kein Modul gibt, das gefunden werden kann. Wenn ich denselben Befehl von meinem Terminal im Projektverzeichnis aus aufrufe, erhalte ich denselben Fehler.

Wenn ich es als pythonModul aufrufe pipenv run python -m pytest, funktioniert es, da es das aktuelle Verzeichnis zu hinzufügt PYTHONPATH. Wenn ich die Editoren von einem aus starte, pipenv shellfunktionieren die Tests auch. Unabhängig davon, wie ich die Editoren starte, import src.appwird das als ungültig markiert.

Wenn ich die Editoreinstellungen starte, PYTHONPATH=$PYTHONPATH:.funktionieren die Tests auch, allerdings beschwert sich die Syntaxprüfung immer noch.

Wie kann ich das am saubersten mit Editoren wie emacsoder handhaben vim? Ich möchte nicht auf pycharmund ähnliche Tools umsteigen, die dieses Problem „automatisch“ lösen.

Antwort1

Gemäß pipenvDokumentation wird jede .envDatei im Verzeichnis pipenvgeladen, aus dem der Aufruf erfolgt.

Dies bedeutet, dass (beispielsweise) wenn Sie während der Verwendung der Ebene test_app.pyin geöffnet haben, die des Projekts (wie üblich) geladen wird, aber auch die automatisch geladen wird und die internen Abhängigkeiten der Datei funktionieren.emacspythonpipenv.env

So funktioniert es für mich beispielsweise, wenn ich .envdiesen Inhalt an der Projektstammposition erstelle:

PYTHONPATH=$PYTHONPATH:.

Jetzt können Sie Unit-Tests auch direkt ausführen, emacsohne dass es beim Import zu Problemen kommt.

Nur so konnte ich es zum Laufen bringen, allerdings wirkt die Lösung hackig und unelegant.

verwandte Informationen