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.pypython myfile.py./somedir/myfile.pypython somedir/myfile.pyexecfile('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.
pathlibrozwiązanie jeśli używasz Pythona 3.4 lub nowszy: stackoverflow.com/a/48931294/1011724
python myfile.pyz powłoki, działa, ale zarówno :!python %i :!python myfile.pywewną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?