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

Iniciado por n1sendev, Octubre 08, 2017, 06:48:09 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 08, 2017, 06:48:09 PM Ultima modificación: Noviembre 29, 2017, 09:34:06 PM por n1sendev
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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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
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
pip install --upgrade pyinstaller


Si quieren ver más; acá les dejo la página de pyinstaller: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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

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
cd C:\Users\usuario\Desktop\

No así:
Código: dos
cd C:\Users\usuario\Desktop\miprograma.py




Empieza lo divertido, convertir a .exe!
Escribimos ahora en el cmd lo siguiente:
Código: dos
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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta xD



Ahora vamos a cmd y escribimos:
Código: dos
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
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
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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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
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

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
./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  ;)





Hola bro!

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

Saludos,
ANTRAX


Gracias! Prontro quisas alga más tutoriales sobre Python u otras cosas :D

buen tutorial. bien detallado.

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


si mi archivo python tiene dependencias de paquetes y algunas imagenes, como lo haria?

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.

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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta build_ext --inplace --force' to build the C extensions first.
[11824] Failed to execute script main


No hay que crear un archivo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ni nada por el estilo? Si alguien pudiera ayudarme le estaría muy agradecido, un saludo.

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.

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!

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

Enero 23, 2019, 01:18:38 AM #11 Ultima modificación: Enero 23, 2019, 01:22:14 AM por Prudence
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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!

Hola.

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

Gracias





.

Diciembre 14, 2020, 11:47:54 PM #13 Ultima modificación: Diciembre 14, 2020, 11:50:14 PM por DtxdF
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

¿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
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Ok.

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