Vorrei vedere qual è il modo migliore per determinare l'attuale directory di script in Python?
Ho scoperto che, a causa dei molti modi di chiamare il codice Python, è difficile trovare una buona soluzione.
Ecco alcuni problemi:
__file__
non è definito se lo script viene eseguito conexec
,execfile
__module__
è definito solo in moduli
Casi d'uso:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(da un altro script, che può trovarsi in un'altra directory e che può avere un'altra directory corrente.
So che non esiste una soluzione perfetta, ma sto cercando l'approccio migliore che risolva la maggior parte dei casi.
L'approccio più usato è os.path.dirname(os.path.abspath(__file__))
ma questo in realtà non funziona se si esegue lo script da un altro con exec()
.
avvertimento
Qualsiasi soluzione che utilizza la directory corrente non funzionerà, ciò può variare in base al modo in cui viene chiamato lo script o può essere modificato all'interno dello script in esecuzione.
pathlib
soluzione di Ron Kalian se stai usando Python 3.4 o versioni successive: stackoverflow.com/a/48931294/1011724
python myfile.py
da una shell, funziona, ma entrambi :!python %
e :!python myfile.py
all'interno di VIM falliscono con Il sistema non riesce a trovare il percorso specificato. Questo è abbastanza fastidioso. Qualcuno può commentare il motivo dietro questo e potenziali soluzioni alternative?