Me gustaría ver cuál es la mejor manera de determinar el directorio de script actual en python.
Descubrí que, debido a las muchas formas de llamar al código de Python, es difícil encontrar una buena solución.
Aquí hay algunos problemas:
__file__
no está definido si el script se ejecuta conexec
,execfile
__module__
se define solo en módulos
Casos de uso:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(desde otro script, que puede ubicarse en otro directorio y que puede tener otro directorio actual.
Sé que no hay una solución perfecta, pero estoy buscando el mejor enfoque que resuelva la mayoría de los casos.
El enfoque más utilizado es, os.path.dirname(os.path.abspath(__file__))
pero esto realmente no funciona si ejecuta el script desde otro con exec()
.
Advertencia
Cualquier solución que use el directorio actual fallará, esto puede ser diferente según la forma en que se llama el script o se puede cambiar dentro del script en ejecución.
pathlib
solución de Ron Kalian si está utilizando Python 3.4 o superior: stackoverflow.com/a/48931294/1011724
python myfile.py
desde un shell, funciona, pero ambos :!python %
y :!python myfile.py
desde vim fallan con El sistema no puede encontrar la ruta especificada. Esto es bastante molesto. ¿Alguien puede comentar sobre la razón detrás de esto y las posibles soluciones?