Esto puede parecer una pregunta para novatos, pero no lo es. Algunos enfoques comunes no funcionan en todos los casos:
sys.argv [0]
Esto significa usar path = os.path.abspath(os.path.dirname(sys.argv[0]))
, pero esto no funciona si está ejecutando desde otro script de Python en otro directorio, y esto puede suceder en la vida real.
__expediente__
Esto significa usar path = os.path.abspath(os.path.dirname(__file__))
, pero descubrí que esto no funciona:
py2exe
no tiene un__file__
atributo, pero hay una solución alternativa- Cuando se ejecuta desde IDLE con
execute()
no hay__file__
atributo - OS X 10.6 donde consigo
NameError: global name '__file__' is not defined
Preguntas relacionadas con respuestas incompletas:
- Python - Buscar ruta al archivo que se está ejecutando
- La ruta al archivo actual depende de cómo ejecuto el programa
- ¿Cómo saber la ruta del script en ejecución en Python?
- Cambiar el directorio al directorio de un script Python
Estoy buscando una solución genérica , una que funcione en todos los casos de uso anteriores.
Actualizar
Aquí está el resultado de un caso de prueba:
Salida de python a.py (en 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
árbol
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
el uso de archivos y esto no está dentro de IDLE. Piensa que__file__
se define solo dentro de los módulos.