Y a-t-il une approche universelle en Python pour trouver le chemin du fichier actuellement en cours d'exécution?
Approches infructueuses
path = os.path.abspath(os.path.dirname(sys.argv[0]))
Cela ne fonctionne pas si vous exécutez à partir d'un autre script Python dans un autre répertoire, par exemple en utilisant execfile
en 2.x.
path = os.path.abspath(os.path.dirname(__file__))
J'ai constaté que cela ne fonctionne pas dans les cas suivants:
py2exe
n'a pas d'attribut__file__
, même s'il existe une solution de contournement- Lorsque le code est exécuté depuis IDLE en utilisant
execute()
, auquel cas il n'y a pas d'attribut__file__
- Sous Mac OS X v10.6 (Snow Leopard), j'obtiens
NameError: global name '__file__' is not defined
Cas de test
Arborescence du répertoire
C:.
| a.py
\---subdir
b.py
Contenu de 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")
Contenu de 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
Sortie de python a.py
(sur 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