Como determinar corretamente o diretório de script atual?
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ódulosCasos 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 outro comexec()
.
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.