Je voudrais voir quelle est la meilleure façon de déterminer le répertoire de script actuel en python?
J'ai découvert qu'en raison des nombreuses façons d'appeler du code python, il est difficile de trouver une bonne solution.
Voici quelques problèmes:
__file__
n'est pas défini si le script est exécuté avecexec
,execfile
__module__
est défini uniquement dans les modules
Cas d'utilisation:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(à partir d'un autre script, qui peut se trouver dans un autre répertoire et qui peut avoir un autre répertoire en cours.
Je sais qu'il n'y a pas de solution parfaite, mais je recherche la meilleure approche qui résout la plupart des cas.
L'approche la plus utilisée est os.path.dirname(os.path.abspath(__file__))
mais cela ne fonctionne vraiment pas si vous exécutez le script à partir d'un autre avec exec()
.
avertissement
Toute solution qui utilise le répertoire actuel échouera, cela peut être différent selon la façon dont le script est appelé ou il peut être modifié à l'intérieur du script en cours d'exécution.
pathlib
solution de Ron Kalian si vous utilisez python 3.4 ou supérieur: stackoverflow.com/a/48931294/1011724
python myfile.py
partir d'un shell, cela fonctionne, mais les deux :!python %
et :!python myfile.py
à l'intérieur de vim échouent avec Le système ne peut pas trouver le chemin spécifié. C'est assez ennuyeux. Quelqu'un peut-il commenter la raison derrière cela et les solutions de contournement potentielles?