Cela peut sembler une question pour les débutants, mais ce n'est pas le cas. Certaines approches courantes ne fonctionnent pas dans tous les cas:
sys.argv [0]
Cela signifie utiliser path = os.path.abspath(os.path.dirname(sys.argv[0]))
, mais cela ne fonctionne pas si vous exécutez à partir d'un autre script Python dans un autre répertoire, et cela peut arriver dans la vraie vie.
__fichier__
Cela signifie utiliser path = os.path.abspath(os.path.dirname(__file__))
, mais j'ai trouvé que cela ne fonctionne pas:
py2exe
n'a pas d'__file__
attribut, mais il existe une solution de contournement- Lorsque vous exécutez à partir de IDLE
execute()
sans__file__
attribut - OS X 10.6 où j'obtiens
NameError: global name '__file__' is not defined
Questions connexes avec des réponses incomplètes:
- Python - Trouver le chemin du fichier en cours d'exécution
- Le chemin vers le fichier actuel dépend de la façon dont j'exécute le programme
- Comment connaître le chemin du script en cours d'exécution en Python?
- Changer de répertoire vers le répertoire d'un script Python
Je recherche une solution générique , qui fonctionnerait dans tous les cas d'utilisation ci-dessus.
Mettre à jour
Voici le résultat d'un testcase:
Sortie de python a.py (sous 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
arbre
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
utilisant le fichier et ce n'est pas à l' intérieur du IDLE. Pensez que ce__file__
n'est défini qu'à l'intérieur des modules.