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ó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 outro comexec().

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.

questionAnswers(13)

yourAnswerToTheQuestion