Gostaria de ver qual é a melhor maneira de determinar o diretório de script atual em python?
Descobri que, devido às muitas maneiras de chamar código python, é difícil encontrar uma boa solução.
Aqui estão alguns problemas:
__file__não está definido se o script for executado comexec,execfile__module__é definido apenas em módulos
Casos de uso:
./myfile.pypython myfile.py./somedir/myfile.pypython somedir/myfile.pyexecfile('myfile.py')(de outro script, que pode estar localizado em outro diretório e que pode ter outro diretório atual.
Sei que não existe uma solução perfeita, mas estou procurando a melhor abordagem que resolva a maioria dos casos.
A abordagem mais usada é, os.path.dirname(os.path.abspath(__file__))mas isso realmente não funciona se você executar o script de outra com exec().
Aviso
Qualquer solução que use o diretório atual falhará, isso pode ser diferente com base na maneira como o script é chamado ou pode ser alterado dentro do script em execução.
pathlibsolução de Ron Kalian se você estiver usando o python 3.4 ou superior: stackoverflow.com/a/48931294/1011724
python myfile.pypartir de um shell, ele funciona, mas ambos :!python %e :!python myfile.pyde dentro do vim falham com O sistema não consegue encontrar o caminho especificado. Isso é muito chato. Alguém pode comentar sobre o motivo por trás disso e possíveis soluções alternativas?