Dies mag wie eine Anfängerfrage erscheinen, ist es aber nicht. Einige gängige Ansätze funktionieren nicht in allen Fällen:
sys.argv [0]
Dies bedeutet, dass Sie verwenden path = os.path.abspath(os.path.dirname(sys.argv[0]))
, dies funktioniert jedoch nicht, wenn Sie ein anderes Python-Skript in einem anderen Verzeichnis ausführen. Dies kann im wirklichen Leben passieren.
__Datei__
Dies bedeutet verwenden path = os.path.abspath(os.path.dirname(__file__))
, aber ich fand, dass dies nicht funktioniert:
py2exe
hat kein__file__
Attribut, aber es gibt eine Problemumgehung- Wenn Sie von IDLE mit ausführen,
execute()
gibt es kein__file__
Attribut - OS X 10.6 wo ich hinkomme
NameError: global name '__file__' is not defined
Verwandte Fragen mit unvollständigen Antworten:
- Python - Pfad zur ausgeführten Datei finden
- Der Pfad zur aktuellen Datei hängt davon ab, wie ich das Programm ausführe
- Woher weiß man den Pfad des laufenden Skripts in Python?
- Wechseln Sie in das Verzeichnis eines Python-Skripts
Ich suche nach einer generischen Lösung , die in allen oben genannten Anwendungsfällen funktioniert.
Aktualisieren
Hier ist das Ergebnis eines Testfalls:
Ausgabe von Python a.py (unter Windows)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py.
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py.
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
Baum
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
unter OS 10.6 eine Datei verwende und diese nicht im IDLE enthalten ist. Denken Sie, dass dies__file__
nur innerhalb von Modulen definiert ist.