Chciałbym zobaczyć, jaki jest najlepszy sposób określenia bieżącego katalogu skryptów w Pythonie?
Odkryłem, że ze względu na wiele sposobów wywoływania kodu python trudno jest znaleźć dobre rozwiązanie.
Oto kilka problemów:
__file__
nie jest zdefiniowany, jeśli skrypt jest wykonywany za pomocąexec
,execfile
__module__
jest zdefiniowany tylko w modułach
Przypadków użycia:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(z innego skryptu, który może znajdować się w innym katalogu i może mieć inny katalog bieżący.
Wiem, że nie ma idealnego rozwiązania, ale szukam najlepszego rozwiązania, które rozwiązałoby większość przypadków.
Najczęściej stosowanym podejściem jest, os.path.dirname(os.path.abspath(__file__))
ale to naprawdę nie działa, jeśli wykonasz skrypt z innego za pomocą exec()
.
Ostrzeżenie
Każde rozwiązanie korzystające z bieżącego katalogu zawiedzie, może być inaczej w zależności od sposobu wywołania skryptu lub można je zmienić w działającym skrypcie.
pathlib
rozwiązanie jeśli używasz Pythona 3.4 lub nowszy: stackoverflow.com/a/48931294/1011724
python myfile.py
z powłoki, działa, ale zarówno :!python %
i :!python myfile.py
wewnątrz vima zawodzą z System nie może znaleźć określonej ścieżki. To dość denerwujące. Czy ktoś może skomentować przyczynę tego i potencjalne obejścia?