arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Crear archivos ejecutables con Python

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 3 Min. de lectura

remove_red_eye 158132 visitas

calendar_today 02 Junio 2019

Como sabemos, y si no, ahora ya lo sabes, Python es un lenguaje interpretado, esto funciona excelente cuando nos encontramos en el proceso de desarrollo, sin embargo, ¿Qué sucede cuando nuestro proyecto está listo para que el usuario final comience a utilizarlo? Bien, esto depende de nuestro proyecto, por ejemplo, si estamos desarrollando un página web lo más lógico será hacer deploy del proyecto a un servidor y listo, por otro lado si nuestro script lo usaremos para temas un poco más internos, quizás, machine learning, automatización de procesos, por mencionar algunos, en esos casos creo que es aceptable ejecutar el proyecto desde la terminal, pero, ¿Y si hablamos de aplicaciones de escritorio, aplicaciones en donde el usuario tiene que interactuar con botones, labels, checkboxes, etc...? En esos caso, instalar el intérprete de python en cada una de las computadoras de los usuarios y capacitarlos para que aprendar a ejecutar el proyecto desde la terminal sería una opción muy poco viable. Una solución a este problema sería crear un archivo ejecutable, de esta forma el proyecto se vuelve de fácil acceso.

Actualmente contamos con dos proyectos los cuales nos permiten crear archivos ejecutables a partir de scripts en Python.

En esta ocasión crearemos un ejecutable para un proyecto el cual se apoya de la librería Toga. 😃

En mi caso, al utilizar un sistema operativo basado en Unix, haré uso de la librería pyinstaller. Si te encuentras utilizando Windows tu mejor opción será py2exe. De py2exe ya hablaremos en otra ocasión. 😉

Lo primero que debemos hacer es instalar la librería.

pip install pyinstaller

Una vez la instalación haya finalizado, el siguiente paso será crear el archivo ejecutable, sí, así de fácil. Para ello debemos asegurarnos que nos encontramos en la versión final del proyecto, la versión que queremos liberar.

Ejecutamos el siguiente comando.

pyinstaller  tu_script.py

Colocamos como argumento nuestro script principal, script donde se encuentra nuestra clásica condición:

if __name__ == '__main__':
    ...

El proceso para crear el ejecutable puede tomar un par de segundos, inclusive minutos dependiendo del tamaño y las dependencias del proyecto.

Una vez el proceso haya finalizado dos nuevas carpetas se habrán creado: build y dist, no insteresa dist, puesto que allí encontraremos nuestro archivo ejecutable. El archivo tendrá el mismo nombre que el script principal.

En mi caso si ejecuto, vaya, el ejecutable, obtengo el siguiente resultado.

Ups, la imagen no está. 😰 Si tu script no utiliza recursos externos, por ejemplo, imágenes, fuentes, sonidos, en ese caso, el tutorial finalizará hasta este punto, por el contrario si tu script si se apoya de este tipo de archivos, pues, no queda de otra que solucionar este problema. Para ello debemos de modificar el archivo .spec

Si el archivo no existe, lo creamos.

pyi-makespec tu_script.py

Nos situamos en la lista data, después de la lista binaries y antes de la lista hiddenimports.

...
datas=[],
...

Dentro de la lista agregamos todos los recursos que el proyecto necesita. Haremos esto mediante tuplas.

...
datas=[ ('./resources/*.png', 'resources') ],
...

Las tuplas deben de poseer dos valores. El primer valor especifica el o los archivos en el sistema. El segundo valor especifica el nombre del folder que contendrá los archivos en tiempo de ejecución.

En este caso todos los archivos .png de mi carpeta resources serán copiados y pegados en la carpeta resources del archivo ejecutable.

Una vez hayamos colocado todos los archivos, lo último que resta por hacer es crear nuevamente el archivo ejecutable. Yo recomiendo eliminar las carpetas build y dist previamente creadas.

Para crear el ejecutable ahora haremos uso del archivo .spec

pyinstaller tu_script.spec 

Listo, los recursos se han agregado al archivo ejecutable. 🍺


Y bien, de esta forma es como nosotros podemos crear archivos ejecutables a partir de scripts escritos en Python.

Ya para finalizar algo que me gustaría mencionar es que solo podemos crear ejecutable para nuestro sistema operativo. Si creamos ejecutable en Mac, este no podrá ser utilizando en windows y viceversa. Debemos crear el archivo ejecutable en el sistema operativo en el cual queremos distribuirlo. 😎