This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)

  • 14 Replies
  • 21579 Views

0 Members and 1 Guest are viewing this topic.

Offline n1sendev

  • *
  • Underc0der
  • Posts: 74
  • Actividad:
    0%
  • Reputación 0
  • No sabes lo que tienes hasta que lo pierdes.
    • View Profile
Hola, hoy vengo a dar un aporte, que es el siguiente: como convertir de .py a .exe
Bien, sin mas preámbulo empecemos:

Si estan en Windows:
1 - Primero de todo, necesitamos pywin32.
Para eso, vamos a la siguiente página: You are not allowed to view links. Register or Login



Acá, como vemos en la imagen, veremos muchas versiones para descargar.
La versión que quieras descargar depende de tu pc y de la versión de Python que usas.
En este caso, yo tengo un pc de 64 bits y uso Python 3.6, así que descargare la versión que dice: pywin32-221.win-amd64-py3.6.exe
Si tienes un pc de 32 bits y usas Python 3.6, descarga la versión que dice pywin32-221.win32-py3.6.exe
Si usas otras versiones de Python, ahí puedes elegir según la versión que tengas.

2 - Ahora instalaremos el módulo pyinstaller
Ahora tenemos que abrir el Símbolo de sistema (cmd) en modo administrador.
Para eso, presionamos la tecla Windows y la tecla "x", ahí les aparecerá lo siguiente "Símbolo de sistema (administrador)"
le das clic y le das permiso...

Otra seria buscar en la barra de tareas, y poner cmd, le dan clic derecho y de ahi le dan a "Ejecutar como administrador"

Ya, una vez ya abierto nuestro cmd en modo administrador, ponemos esto:
Code: (dos) You are not allowed to view links. Register or Login
pip install pyinstallerDe ahi les cargara y esperan a que se termine de instalar.



En mi caso no lo instalo por que ya lo tengo instalado
Si quieren actualizar o ver si hay actualizaciones para el módulo pyinstaller
pongan:
Code: (dos) You are not allowed to view links. Register or Login
pip install --upgrade pyinstaller
Si quieren ver más; acá les dejo la página de pyinstaller: You are not allowed to view links. Register or Login
Ahí tienen la documentación y más información.

3 - Ahora viene lo divertido, compilamos de .py a .exe!
Creamos un programa cualquiera en Python:

Code: (python) You are not allowed to view links. Register or Login
print("Hola mundo!")

input("") # Es para evitar que se salga el programa

Ahora abrimos otra vez el cmd, esta vez en modo normal, presionando la tecla Windows y la tecla "r"
de ahi ponen cmd y dan a enter.

Una vez ya abierto el cmd, escribimos cd y seguido de de la ruta del archivo
Ejemplo:
Code: (dos) You are not allowed to view links. Register or Login
cd C:\Users\usuario\Desktop\No así:
Code: (dos) You are not allowed to view links. Register or Login
cd C:\Users\usuario\Desktop\miprograma.py


Empieza lo divertido, convertir a .exe!
Escribimos ahora en el cmd lo siguiente:
Code: (dos) You are not allowed to view links. Register or Login
pyinstaller nombre_del_programa.py
De ahi, presionas enter, y empieza a compilar!



Suele tirar unas advertencias, sobre que falta un .dll, pero no hay de que preocuparse, por que el mismo pyinstaller los crea.

Ahora si nos fijamos, en la carpeta o donde sea donde estaba tu programa en .py, se crean 3 carpetas y 1 archivo


Por ahora nos interesaremos en la carpeta "dist", entramos a ella,
de ahí encontraremos una carpeta, entramos a ella, y veremos muchos archivos.
El que nos interesa ahora es el archivo compilado, tiene el nombre del archivo en .py que compilaste,



Simplemente le damos clic y ahí esta! Nuestro programa en .exe!



Extras
-Poner icono al .exe

Si de casualidad quieren que su .exe tenga un icono personalizado, se hace lo siguiente:

Ojo! el icono tiene que estar en formato .ico

En mi caso, cree esta belleza del arte en You are not allowed to view links. Register or Login xD



Ahora vamos a cmd y escribimos:
Code: (dos) You are not allowed to view links. Register or Login
pyinstaller nombre_de_nuestro_programa.py -i nuestroicono.ico
De ahí crea el .exe con el icono que hemos hecho!

-Si mi programa tiene interfaz gráfica (Tkinter, GTK+, PyQt5, etc) y no depende de la consola, como elimino la consola?

Es sencillo, hace lo siguiente:
Code: (dos) You are not allowed to view links. Register or Login
pyinstaller nombre_de_nuestro_programa.py --noconsoley listo.

-Como hago para solo generar el .exe, sin todos esos demás archivos?
Fácil, puedes hacer lo siguiente:
Code: (dos) You are not allowed to view links. Register or Login
pyinstaller nombre_de_nuestro_programa.py --onefileDe ahí, como siempre genera 3 carpetas y un archivo, lo único que nos importa es la carpeta llamada "dist"



entramos a ella, y encotraremos el .exe de nuestro programa, lo movemos a otra carpeta, (en este caso lo muevo al escritorio)
Después, de haber movido el .exe a otra ubicación, borramos las carpetas y archivos generados por el pyinstaller.



Y tenemos nuestro .exe, sin ningun archivo adicional más.



(Gracias a You are not allowed to view links. Register or Login por el aporte!)


Si estan en una distro de GNU/Linux:

No es necesario instalar pywin32, como antes, abrimos la consola y escribimos:
Code: (bash) You are not allowed to view links. Register or Login
sudo pip3 install pyinstaller(por defecto, en algunas distros el pip de Python no viene instalado, si no viene instalado, escribimos esto:)
Code: (bash) You are not allowed to view links. Register or Login
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

Una vez hecho todo esto, se puede hacer lo mismo mencionado anteriormente con pyinstaller. La diferencia es que en GNU/Linux, genera un ejecutable
(no un .exe). Para ejecutarlo, escribimos en la consola:
Code: (bash) You are not allowed to view links. Register or Login
./nombre_de_nuestro_programay se va a ejecutar.



Muchas gracias por leer, si tienes una duda, algo no ha funcionado, etc, no dudes en comentar.
Gracias  ;)



« Last Edit: November 29, 2017, 09:34:06 pm by n1sendev »

Online ANTRAX

  • *
  • Administrator
  • Posts: 5854
  • Actividad:
    10%
  • Country: ar
  • Reputación 43
  • ANTRAX
  • Twitter: @Underc0de
    • View Profile
    • Underc0de
    • Email

Re:[Python 3.x] Como compilar .py a .exe!

  • on: October 08, 2017, 07:44:08 pm
Hola bro!

Esta muy bueno y muy completo!! Te felicito por tan buen material!
Gracias por traerlo a Underc0de!!

Saludos,
ANTRAX


Offline n1sendev

  • *
  • Underc0der
  • Posts: 74
  • Actividad:
    0%
  • Reputación 0
  • No sabes lo que tienes hasta que lo pierdes.
    • View Profile

Re:[Python 3.x] Como compilar .py a .exe!

  • on: October 08, 2017, 08:26:15 pm
Gracias! Prontro quisas alga más tutoriales sobre Python u otras cosas :D

Online noxonsoftwares

  • *
  • Ex-Staff
  • *****
  • Posts: 364
  • Actividad:
    0%
  • Country: ar
  • Reputación 10
  • Ayudar es Crecer, Crecer es Mejorar
    • View Profile
    • NOXONSOFTWARES
buen tutorial. bien detallado.

Anexo algo.... para no tener el .exe y los archivos por separado se coloca --onefile .
saludos

Offline blityon

  • *
  • Underc0der
  • Posts: 6
  • Actividad:
    0%
  • Reputación 0
    • View Profile
Muchas gracias, y muy bien explicado.

Offline royer14

  • *
  • Underc0der
  • Posts: 8
  • Actividad:
    0%
  • Reputación 0
    • View Profile
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

Online noxonsoftwares

  • *
  • Ex-Staff
  • *****
  • Posts: 364
  • Actividad:
    0%
  • Country: ar
  • Reputación 10
  • Ayudar es Crecer, Crecer es Mejorar
    • View Profile
    • NOXONSOFTWARES
You are not allowed to view links. Register or Login
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

Ya agrega las dependencias.

Offline alfredo89

  • *
  • Underc0der
  • Posts: 2
  • Actividad:
    0%
  • Reputación 0
    • View Profile
Hola buenas estoy teniendo problemas a la hora de compilar a .exe una aplicación de escritorio, he leído que no hace falta incluir las dependencias? Mi aplicación trabaja con muchos paquetes y librerías externas, y me está dando este error:

Traceback (most recent call last):
  File "main.py", line 21, in <module>
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\pandas\__init__.py", line 35, in <module>
ImportError: C extension: No module named 'pandas._libs.tslibs.np_datetime' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace --force' to build the C extensions first.
[11824] Failed to execute script main


No hay que crear un archivo setup.py ni nada por el estilo? Si alguien pudiera ayudarme le estaría muy agradecido, un saludo.

Offline Botters

  • *
  • Underc0der
  • Posts: 7
  • Actividad:
    0%
  • Reputación 0
    • View Profile
excelente me gustó mucho!  al convertirlo en exe y pasarlo a otra pc que no tiene nada de python funciona o tengo que instalarle el python, modulos, etc?
soy noob me disculpan si es muy obvio.

Offline Errodringer

  • *
  • Underc0der
  • Posts: 4
  • Actividad:
    0%
  • Reputación 0
    • View Profile
    • Email
Excelente explicación! a mi me encanta como funciona la librería PyInstaller, de hecho en algún vídeo mio compilo una GUI con este paquete. Gracias por el aporte, un saludo amigo!

Offline jholer

  • *
  • Underc0der
  • Posts: 1
  • Actividad:
    0%
  • Reputación 0
    • View Profile
    • Email
Hola, tengo un problema con el icono, con:     pyinstaller nombre_de_nuestro_programa.py -i nuestroicono.ico --noconsole --onefile
Crea el .exe con todo su icono pero a al abrirlo " Failed to execute script miprograma "

Cuando copio el icono (que cree junto con el script dentro del python) junto al exe, si se ejecuta perfectamente con sus iconos.
el exe Depende del icono que esta en el script que he creado.

¿Como hago para que no dependa del icono ?

Gracias

Offline ???????

  • *
  • Underc0der
  • Posts: 242
  • Actividad:
    0%
  • Country: 00
  • Reputación 12
    • View Profile
@You are not allowed to view links. Register or Login @You are not allowed to view links. Register or Login Lo que podés hacer es lo siguiente:

Crear un archivo .spec del script

En el CMD coloca lo siguiente:

- pyi-makespec --paths=<directorio donde se alojan las dependencias> <archivo principal>

En mi caso, me quedaría algo como esto:

- pyi-makespec --paths=C:\Programa\Dependencias principal.py

Y verás como se generará el archivo .spec


Creando .exe con archivo .spec

Con el archivo .spec generado, pasaremos a utilizar la siguiente sintaxis para generar el .exe

- pyinstaller <archivo.spec>

En mi caso, quedaría algo como esto:

- pyinstaller principal.spec

Y finalmente, se crearán las dos carpetas "dist" y "build", donde en el dist tendrás el archivo ejecutable creado.


Espero que te sirva. Saludos!
« Last Edit: January 23, 2019, 01:22:14 am by Prudence »

Offline Girardelli

  • *
  • Underc0der
  • Posts: 2
  • Actividad:
    0%
  • Country: ar
  • Reputación 0
    • View Profile
Hola.

Todo bien.
Pero cuando saco el .exe de la carpeta, deja de funcionar.
¿?
¿De qué archivo tiene dependencia?

Gracias





.

Offline DtxdF

  • *
  • Moderador Global
  • Posts: 1144
  • Actividad:
    20%
  • Country: 00
  • Reputación 27
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • View Profile
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
@You are not allowed to view links. Register or Login

¿Estás usando el parámetro --onefile?, porque si no, el ejecutable dependerá de las librerías que se encuentren en su ubicación y fallará.

Y si no es el caso que planteé, dé más información útil, ya sea una captura de pantalla o el resultado al concluir la ejecución del comando.

~ DtxdF
« Last Edit: December 14, 2020, 11:50:14 pm by DtxdF »
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Offline Girardelli

  • *
  • Underc0der
  • Posts: 2
  • Actividad:
    0%
  • Country: ar
  • Reputación 0
    • View Profile
Ok.

Muchas gracias.
En efecto, no había leído bien todo el post.
Ahora va bien.