Cómo obtener la ruta de acceso de la secuencia de comandos congelada de ejecución

Si está ejecutando un script de Python congelado (congelado usando py2exe) desde un directorio y una unidad diferente de donde está presente el script, ¿cuál es la mejor manera de determinar la ruta del script de ejecución?

Pocas soluciones he probado

<code>inspect.getfile(inspect.currentframe())
</code>

Problema: No devuelve el camino completo. Solo devuelve el nombre del script.

<code>os.path.abspath( __file__ )
</code>

Problema: no funciona en Windows

<code>os.path.dirname(sys.argv[0])
</code>

Problema: Devuelve una cadena vacía.

<code>os.path.abspath(inspect.getsourcefile(way3))
</code>

No funcionará si la unidad es diferente de la pwd

<code>os.path.dirname(os.path.realpath(sys.argv[0]))
</code>

No funcionará si la unidad es diferente de la pwd

Aquí hay un ejemplo mínimo que no funciona.

<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>

Preguntas relacionadas:

¿Cómo saber la ruta del script en ejecución en Python?¿Cómo obtengo la ruta y el nombre del archivo que se está ejecutando actualmente?python, ruta de acceso del script [cerrado]

Nota

La solución de @ Fenikso funcionará si la secuencia de comandos reside en la misma unidad en la que está ejecutando, pero cuando está en una unidad diferente, no funcionará

Respuestas a la pregunta(3)

Su respuesta a la pregunta