Underc0de

Programación Scripting => Python => Mensaje iniciado por: n1sendev en Octubre 08, 2017, 06:48:09 PM

Título: [Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: n1sendev 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 (https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/)

(https://i.imgur.com/OEoMF7x.png)

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) [Seleccionar]
pip install pyinstaller
De ahi les cargara y esperan a que se termine de instalar.

(https://i.imgur.com/DHoDg4J.png)

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) [Seleccionar]
pip install --upgrade pyinstaller

Si quieren ver más; acá les dejo la página de pyinstaller: Pyinstaller Page (http://www.pyinstaller.org/downloads.html)
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) [Seleccionar]

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:
Código (dos) [Seleccionar]
cd C:\Users\usuario\Desktop\
No así:
Código (dos) [Seleccionar]
cd C:\Users\usuario\Desktop\miprograma.py

(https://i.imgur.com/ASkl3R5.png)

Empieza lo divertido, convertir a .exe!
Escribimos ahora en el cmd lo siguiente:
Código (dos) [Seleccionar]
pyinstaller nombre_del_programa.py

De ahi, presionas enter, y empieza a compilar!

(https://i.imgur.com/Mtq4ANV.png)

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
(https://i.imgur.com/RrPXQJY.png)

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,

(https://i.imgur.com/OEABoAC.png)

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

(https://i.imgur.com/TaH6HmD.png)


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 (https://www.gimp.org/) xD

(https://i.imgur.com/BYjGHii.png)

Ahora vamos a cmd y escribimos:
Código (dos) [Seleccionar]
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) [Seleccionar]
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) [Seleccionar]
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"

(https://i.imgur.com/W8VQ5Gl.png)

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.

(https://i.imgur.com/yOnucXg.png)

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

(https://i.imgur.com/1zKPU4r.png)

(Gracias a noxonsoftwares (https://underc0de.org/foro/profile/noxon/) 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) [Seleccionar]
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) [Seleccionar]

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:
Código (bash) [Seleccionar]
./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  ;)




Título: Re:[Python 3.x] Como compilar .py a .exe!
Publicado por: ANTRAX 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
Título: Re:[Python 3.x] Como compilar .py a .exe!
Publicado por: n1sendev en Octubre 08, 2017, 08:26:15 PM
Gracias! Prontro quisas alga más tutoriales sobre Python u otras cosas :D
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: noxonsoftwares 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
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: blityon en Octubre 10, 2017, 09:19:06 PM
Muchas gracias, y muy bien explicado.
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: royer14 en Noviembre 09, 2017, 12:07:54 AM
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: noxonsoftwares en Noviembre 09, 2017, 01:17:12 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

Ya agrega las dependencias.
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: alfredo89 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.
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: Botters 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.
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: Errodringer 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!
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: jholer 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
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: ??????? en Enero 23, 2019, 01:18:38 AM
@royer14 (https://underc0de.org/foro/index.php?action=profile;u=71604) @alfredo89 (https://underc0de.org/foro/index.php?action=profile;u=84236) 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!
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: Girardelli en Diciembre 14, 2020, 08:27:41 PM
Hola.

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

Gracias





.
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: DtxdF en Diciembre 14, 2020, 11:47:54 PM
@Girardelli (https://underc0de.org/foro/index.php?action=profile;u=119619)

¿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
Título: Re:[Python 3.x] Como compilar .py a .exe! (usando Pyinstaller)
Publicado por: Girardelli en Diciembre 17, 2020, 05:59:05 PM
Ok.

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