Más que un artículo, un recordatorio o cheat sheet con las principales herramientas (y sus respectivos comandos) para crear archivos ejecutables de una forma rápida y eficaz, asumiendo que éstas ya están instaladas en vuestros sistemas.
cx_Freeze
Versión: 2.6+, 3.x.
Plataformas: todas las soportadas por Python.
El método más sencillo para obtener un archivo ejecutable es utilizando el script cxfreeze
.
cxfreeze main.py
O bien:
python cxfreeze main.py
Este simple comando invoca a cx_Freeze para transformar el fichero main.py
(junto con todos los módulos que éste importe) en un archivo ejecutable.
En sistemas Microsoft Windows, cxfreeze
está localizado dentro de la carpeta Scripts
en el directorio de instalación de Python. Por lo tanto, una invocación se vería, por ejemplo, de la siguiente forma.
C:\Python34\scripts\cxfreeze main.py
Para establecer una imagen como ícono, debe utilizarse la opción --icon
.
cxfreeze --icon=archivo.ico main.py
En Microsoft Windows, puede ocultarse la consola implementando la opción --base-name=Win32GUI
.
cxfreeze --base-name=Win32GUI --icon=archivo.ico main.py
El script creará automáticamente un fichero llamado main.spec
, que contiene las opciones generales para cx_Freeze, y la carpeta dist
, en donde se encontrará el archivo ejecutable.
PyInstaller
Versión: 2.6+, 3.x.
Plataformas: Microsoft Windows y Linux.
Se invoca al archivo pyinstaller.py
y se especifica el nombre del archivo principal que se desea convertir.
pyinstaller.py main.py
Al igual que cx_Freeze, la opción --icon
es utilizada para indicar un ícono.
pyinstaller.py --icon=archivo.ico main.py
La opción --noconsole
permite, lógicamente, ocultar la consola.
pyinstaller.py --noconsole --icon=archivo.ico main.py
PyInstaller brinda la posibilidad de incluir todas las dependencias en un único archivo vía la opción --onefile
.
pyinstaller.py --onefile --noconsole --icon=archivo.ico main.py
Cabe aclarar que dicha opción resultará en un tiempo mayor de inicialización del programa.
Además, puede reducirse el tamaño del archivo final comprimiéndolo con UPX vía la opción --upx-dir
, que debe especificar la carpeta en donde se encuentra el compresor (por ejemplo, --upx-dir=C:/upx
.)
Por último, PyInstaller puede encriptar los archivos de código de fuente de Python siempre que se provea una clave de 16 dígitos vía --key=clave_de_16_digitos
. Esta opción requiere del paquete pycrypto.
Al finalizar, el archivo ejecutable se encontrará en la carpeta dist
(junto con todas sus dependencias, si no se ha especificado la opción --onefile
). La carpeta build
creada durante la ejecución de PyInstaller puede ser eliminada.
py2exe
Versión: 2.x, 3.x.
Plataformas: Microsoft Windows.
Es una extensión de distutils
que añade la opción py2exe
.
Se crea un archivo llamado setup.py
, indicando el nombre del archivo principal.
#!/usr/bin/env python # -*- coding: utf-8 -*- from distutils.core import setup import py2exe setup( console=[{"script": "main.py"}] )
Luego, se llama a éste con la opción py2exe
.
python setup.py py2exe
Al igual que PyInstaller, el archivo ejecutable se encontrará en la carpeta dist
junto con sus dependencias, mientras que build
puede ser descartada.
Para indicar una imagen como ícono, debe utilizarse la opción icon_resources
.
setup( console=[{"script": "main.py", "icon_resources": [(1, "icon.ico")]}] )
Únicamente en Python 3 pueden incluirse todas las dependencias en un único archivo, similar a la opción --onefile
de PyInstaller.
setup( options={"py2exe": {"bundle_files": 0}}, console=[{"script": "main.py", "icon_resources": [(1, "icon.ico")]}] )
Nancy says:
¡¡Muchas gracias por la información!!
Jose says:
Estoy tratando de aplicar pyintaller py2exe y otros a un codigo python que diseñe, y parece que estas aplicaciones solo funcionan con códigos pequeños, si alguien tiene mucha experiencia en esto, me gustaría compartirle el código para ver si se le puede hacer un ejecutable, con cualquier aplicación,
Recursos Python says:
Hola, podés pasar por el foro para ver casos más particulares. Saludos
cesar says:
hola en mi caso yo hice un buscaminas contiene una carprta con imagenes y no me deja, yo no se como hacerlo el progrma tiene aproximadamente 242 lines de codigo .
Recursos Python says:
Hola, ¿qué error obtenés? No debería influir en nada que tengas una carpeta con imágenes.
Saludos
sandra says:
En mi archivo py uso reportlab y tengo la versión 2.7.10 de python.
from reportlab.pdfgen import canvas
from reportlab.lib.colors import white,red,green,blue,gray,black
from os import startfile
cuando intento compilar me da error y directamente no crea el archivo .exe.
Como puedo solucionarlo?
Recursos Python says:
Hola Sandra, creá un nuevo tema en el foro y mostranos el error que estás obteniendo.
Saludos
Wesley says:
Hola! gracias por está información. Está de lujo.
PyInstaller y cx_Freeze son mejor, sobretodo la primera, mi opinión.
Lucho says:
Hola, ¿cuál es la mejor? (según su juicio)
Saludos
Recursos Python says:
Hola Lucho. PyInstaller y cx_Freeze funcionan realmente muy bien, además, son multiplataforma, una gran ventaja frente a py2exe.
Un saludo.