Ich würde gerne sehen, wie man das aktuelle Skriptverzeichnis in Python am besten ermittelt.
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 ausgeführt wird mitexec
,execfile
__module__
wird 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 das ein anderes aktuelles Verzeichnis haben kann.
Ich weiß, dass es keine perfekte Lösung gibt, aber ich 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 dies funktioniert wirklich nicht, wenn Sie das Skript von einem anderen mit ausführen exec()
.
Warnung
Jede Lösung, die das aktuelle Verzeichnis verwendet, schlägt fehl. Dies kann je nach Aufruf des Skripts unterschiedlich sein oder innerhalb des laufenden Skripts geändert werden.
pathlib
Lösung, wenn Sie Python 3.4 oder höher verwenden: stackoverflow.com/a/48931294/1011724
python myfile.py
von einer Shell aus arbeiten, funktioniert es, aber beide :!python %
und :!python myfile.py
innerhalb von vim schlagen fehl mit Das System kann den angegebenen Pfad nicht finden. Das ist ziemlich nervig. Kann jemand den Grund dafür und mögliche Problemumgehungen kommentieren?