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.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('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.
pathlib
solução de Ron Kalian se você estiver usando o python 3.4 ou superior: stackoverflow.com/a/48931294/1011724
python myfile.py
partir de um shell, ele funciona, mas ambos :!python %
e :!python myfile.py
de 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?