Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

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

  • 11 Respuestas
  • 14093 Vistas

0 Usuarios y 11 Visitantes están viendo este tema.

Desconectado n1sendev

  • *
  • Underc0der
  • Mensajes: 75
  • Actividad:
    0%
  • Reputación 0
  • No sabes lo que tienes hasta que lo pierdes.
    • Ver Perfil
« en: Octubre 08, 2017, 06:48:09 pm »
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: Python for Windows Extensions



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:
Código: DOS
  1. pip install pyinstaller
De 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:
Código: DOS
  1. pip install --upgrade pyinstaller

Si quieren ver más; acá les dejo la página de pyinstaller: Pyinstaller Page
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:

Código: Python
  1. print("Hola mundo!")
  2.  
  3. input("") # Es para evitar que se salga el programa
  4.  

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:
Código: DOS
  1. cd C:\Users\usuario\Desktop\
No así:
Código: DOS
  1. cd C:\Users\usuario\Desktop\miprograma.py



Empieza lo divertido, convertir a .exe!
Escribimos ahora en el cmd lo siguiente:
Código: DOS
  1. 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 GIMP xD



Ahora vamos a cmd y escribimos:
Código: DOS
  1. 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:
Código: DOS
  1. pyinstaller nombre_de_nuestro_programa.py --noconsole
y listo.

-Como hago para solo generar el .exe, sin todos esos demás archivos?
Fácil, puedes hacer lo siguiente:
Código: DOS
  1. pyinstaller nombre_de_nuestro_programa.py --onefile
De 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 noxonsoftwares por el aporte!)


Si estan en una distro de GNU/Linux:

No es necesario instalar pywin32, como antes, abrimos la consola y escribimos:
Código: Bash
  1. sudo pip3 install pyinstaller
(por defecto, en algunas distros el pip de Python no viene instalado, si no viene instalado, escribimos esto:)
Código: Bash
  1. wget https://bootstrap.pypa.io/get-pip.py
  2. 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:
Código: Bash
  1. ./nombre_de_nuestro_programa
y se va a ejecutar.



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



« Última modificación: Noviembre 29, 2017, 09:34:06 pm por n1sendev »

Desconectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5490
  • Actividad:
    6.67%
  • Reputación 36
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Octubre 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


Desconectado n1sendev

  • *
  • Underc0der
  • Mensajes: 75
  • Actividad:
    0%
  • Reputación 0
  • No sabes lo que tienes hasta que lo pierdes.
    • Ver Perfil
« Respuesta #2 en: Octubre 08, 2017, 08:26:15 pm »
Gracias! Prontro quisas alga más tutoriales sobre Python u otras cosas :D

Conectado noxonsoftwares

  • *
  • Underc0der
  • Mensajes: 296
  • Actividad:
    8.33%
  • Reputación 6
  • Ayudar es Crecer, Crecer es Mejorar
    • Ver Perfil
    • NOXONSOFTWARES
  • Skype: noxonsoftwares
« Respuesta #3 en: Octubre 10, 2017, 11:41:40 am »
buen tutorial. bien detallado.

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

Desconectado blityon

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Octubre 10, 2017, 09:19:06 pm »
Muchas gracias, y muy bien explicado.

Desconectado royer14

  • *
  • Underc0der
  • Mensajes: 8
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #5 en: Noviembre 09, 2017, 12:07:54 am »
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

Conectado noxonsoftwares

  • *
  • Underc0der
  • Mensajes: 296
  • Actividad:
    8.33%
  • Reputación 6
  • Ayudar es Crecer, Crecer es Mejorar
    • Ver Perfil
    • NOXONSOFTWARES
  • Skype: noxonsoftwares
« Respuesta #6 en: Noviembre 09, 2017, 01:17:12 am »
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

Ya agrega las dependencias.

Desconectado alfredo89

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #7 en: Agosto 16, 2018, 07:03:35 am »
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.

Desconectado Botters

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: slipknot1135
« Respuesta #8 en: Octubre 20, 2018, 05:12:12 am »
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.

Desconectado Errodringer

  • *
  • Underc0der
  • Mensajes: 4
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #9 en: Octubre 22, 2018, 04:13:40 pm »
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!

Desconectado jholer

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #10 en: Enero 22, 2019, 10:30:36 pm »
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

Conectado Kirari

  • *
  • Underc0der
  • Mensajes: 81
  • Actividad:
    26.67%
  • Reputación 5
  • No dejes que el mundo te corrompa
    • Ver Perfil
    • Baúl para el público
« Respuesta #11 en: Enero 23, 2019, 01:18:38 am »
@royer14 @alfredo89 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!
« Última modificación: Enero 23, 2019, 01:22:14 am por Prudence »
Jamás te contarán la verdadera versión, siempre te dirán la suya... Por eso... Si quieres saber la verdad, debes buscarla tú mismo...

 

¿Te gustó el post? COMPARTILO!



[UnderTips] Funciones como parámetro de entrada en otras funciones

Iniciado por DeBobiPro

Respuestas: 0
Vistas: 2173
Último mensaje Septiembre 09, 2016, 12:27:16 pm
por DeBobiPro
como con cx_Freeze exportar tkinter a exe con algunas librerias usadas

Iniciado por royer14

Respuestas: 2
Vistas: 2209
Último mensaje Noviembre 08, 2017, 07:58:37 pm
por royer14
[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 2879
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 4010
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 3830
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40