Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: painpills en 30 Noviembre 2022, 09:19 am



Título: hacer que mi .exe hecho con python sepa su propia ubicación
Publicado por: painpills en 30 Noviembre 2022, 09:19 am
Hola, saben si hay alguna forma de que mi programa de python pueda extraer su propia ubicación en disco independientemente de donde se ejecute? para crear una copia de si mismo en otros directorios. Probé con __file__ pero lo que hace es buscar la ruta del .py en el que estoy escribiendo mi código y al momento de volver mi .py en un .exe da un error porque devuelve una ruta erronea, intenté también con os.environ["nombre.exe"] pero no termino de entender como funciona. ayuda :'0


Título: Re: hacer que mi .exe hecho con python sepa su propia ubicación
Publicado por: Danielㅤ en 30 Noviembre 2022, 14:16 pm
Hola, podes usar el método os.getcwd() que te retorna un string con el directorio donde está siéndo ejecutado el script, más info aquí:

https://www.geeksforgeeks.org/get-directory-of-current-python-script/

Nos comentas si te ha funcionado.


Saludos


Título: Re: hacer que mi .exe hecho con python sepa su propia ubicación
Publicado por: painpills en 30 Noviembre 2022, 15:52 pm
Ya había encontrado otra forma, pero igual probé con os.getcwd() y funcionó con el detalle de que para que el script se copiara así mismo tuve que especificar al final de la ruta el nombre y extensión de mi archivo.

por ejemplo si mi archivo era Programa.py tenía que colocarlo así.

shutil.copyfile("C:\Users\Robin\Desktop\Cliente\Programa.py", "Otro directorio")


El problema está en que si se llegaba al cambiar el nombre del archivo daba un error obvio, lo que era un inconveniente para lo que estaba intentando hacer :-\

Mi solución fue utilizar sys.executable


import sys

shutil.copyfile(sys.executable, "Otro directorio")



sys.executable también devuelve un String con la ruta del archivo en ejecución, pero se encarga de incluir al final de la ruta el nombre y extensión de nuestro programa así que ya podía cambiar el nombre de mi .exe y este podía copiarse sin importar que nombre le pusiera. Creo que solo funciona cuando ya hemos compilado nuestro .py en un .exe, porque de otra forma lo que te retorna es la ruta del interprete de python.


Dejo la info. por si le sirve a alguien más.  ;-)