364 Stimmen

Wie bestimmen Sie das aktuelle Skriptverzeichnis richtig?

Ich möchte sehen, was ist der beste Weg, um das aktuelle Skript-Verzeichnis in Python zu bestimmen.

Ich habe festgestellt, dass es aufgrund der vielen Möglichkeiten, Python-Code aufzurufen, schwierig ist, eine gute Lösung zu finden.

Hier sind einige Probleme:

  • __file__ ist nicht definiert, wenn das Skript mit exec , execfile
  • __module__ ist nur in Modulen definiert

Anwendungsfälle:

  • ./myfile.py
  • python myfile.py
  • ./somedir/myfile.py
  • python somedir/myfile.py
  • execfile('myfile.py') (von einem anderen Skript, das sich in einem anderen Verzeichnis befinden kann und ein anderes aktuelles Verzeichnis haben kann.

Ich weiß, dass es keine perfekte Lösung gibt, aber ich bin auf der Suche nach dem besten Ansatz, der die meisten Fälle löst.

Der am häufigsten verwendete Ansatz ist os.path.dirname(os.path.abspath(__file__)) aber das funktioniert nicht, wenn Sie das Skript von einem anderen Skript aus ausführen mit exec() .

Warnung

Jede Lösung, die das aktuelle Verzeichnis verwendet, wird fehlschlagen. Dieses kann je nach Art des Skriptaufrufs unterschiedlich sein oder innerhalb des laufenden Skripts geändert werden.

-1voto

BaiJiFeiLong Punkte 2187
print(__import__("pathlib").Path(__file__).parent)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X