Como obter o caminho do script congelado em execução
Se você estiver executando um script python congelado (congelado usando py2exe) de um diretório e uma unidade diferente de onde o script está presente, qual é a melhor maneira de determinar o caminho do script em execução?
Poucas soluções que tentei
<code>inspect.getfile(inspect.currentframe()) </code>
Problema: Não retorna o caminho completo. Apenas retorna o nome do script.
<code>os.path.abspath( __file__ ) </code>
Problema: não funciona no Windows
<code>os.path.dirname(sys.argv[0]) </code>
Problema: Retorna uma string vazia.
<code>os.path.abspath(inspect.getsourcefile(way3)) </code>
Não vai funcionar se a unidade é diferente do pwd
<code>os.path.dirname(os.path.realpath(sys.argv[0])) </code>
Não vai funcionar se a unidade é diferente do pwd
Aqui está um exemplo não funcional mínimo
<code>D:\>path PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py import os, inspect, sys def way1(): return os.path.dirname(sys.argv[0]) def way2(): return inspect.getfile(inspect.currentframe()) def way3(): return os.path.dirname(os.path.realpath(sys.argv[0])) def way4(): try: return os.path.abspath( __file__ ) except NameError: return "Not Found" def way5(): return os.path.abspath(inspect.getsourcefile(way3)) if __name__ == '__main__': print "Path to this script is",way1() print "Path to this script is",way2() print "Path to this script is",way3() print "Path to this script is",way4() print "Path to this script is",way5() D:\>eggs Path to this script is Path to this script is eggs.py Path to this script is D:\ Path to this script is Not Found </code>
Perguntas relacionadas:
Como saber o caminho do script em execução no Python?Como obtenho o caminho e o nome do arquivo atualmente em execução?python, caminho do script [closed]Nota
@ A solução da Fenikso funcionará se o script estiver na mesma unidade em que você está executando, mas quando estiver em uma unidade diferente, não funcionará