Aprende a Empaquetar tus Programas de Python con PyInstaller

¡Hola! Hoy vamos a hablar sobre PyInstaller, una herramienta esencial para los desarrolladores de Python que desean convertir sus scripts en aplicaciones ejecutables independientes.


PyInstaller permite empaquetar programas de Python en archivos ejecutables para Windows, macOS y Linux, facilitando la distribución de tus aplicaciones sin necesidad de que los usuarios instalen Python.



Introducción

PyInstaller es una herramienta que convierte los scripts de Python (`.py`) en ejecutables (`.exe`, `.app`, etc.) que pueden ejecutarse en máquinas que no tienen Python instalado. Este proceso de empaquetado incluye todos los archivos necesarios, como bibliotecas, módulos y recursos, dentro del ejecutable, lo que simplifica la distribución de aplicaciones.



Características de PyInstaller

  • Compatible con Python 2.7 y 3.3+
  • Soporta múltiples plataformas: Windows, macOS, Linux.
  • Puede generar ejecutables de un solo archivo (`onefile`).
  • Soporta la inclusión de recursos adicionales como imágenes y archivos de datos.
  • Detecta automáticamente las dependencias del script.
  • Soporte para bibliotecas cifradas y protegidas.



Instalación de PyInstaller

Para instalar PyInstaller, simplemente usa `pip`, el gestor de paquetes de Python. Esto lo haces abriendo la linea de comandos de tu sistema operativo, y escribiendo:


pip install pyinstaller


Una vez instalado, puedes verificar la instalación con el siguiente comando:


pyinstaller --version



Uso Básico de PyInstaller

El uso más sencillo de PyInstaller es ejecutar el siguiente comando desde la línea de comandos en el directorio donde se encuentra tu script Python:


pyinstaller tu_script.py



Esto generará un directorio `dist/` que contiene los archivos necesarios para ejecutar tu aplicación, incluyendo el ejecutable.



Explicación del Proceso

Cuando ejecutas PyInstaller, sigue estos pasos:


1. Análisis del script: PyInstaller analiza tu script para determinar todas las dependencias (módulos, bibliotecas, etc.).

2. Creación de la estructura de archivos: Crea una carpeta `build/` donde organiza los archivos temporales necesarios para la creación del ejecutable.

3. Empaquetado: Coloca todos los archivos necesarios en la carpeta `dist/`, junto con el ejecutable.



Parámetros y Opciones de PyInstaller

PyInstaller ofrece una variedad de opciones que te permiten personalizar el proceso de creación del ejecutable. Aquí te explico las más importantes:


1. `--onefile`

Genera un único archivo ejecutable que contiene todos los archivos necesarios.


pyinstaller --onefile tu_script.py


Esto es útil si deseas distribuir tu aplicación como un solo archivo, lo que facilita la distribución y la instalación.



2. `--noconsole` o `--windowed`

- `--noconsole`: Este parámetro elimina la consola cuando ejecutas aplicaciones con interfaz gráfica (GUI). Es especialmente útil en Windows para evitar que aparezca la ventana de la consola.


pyinstaller --onefile --noconsole tu_script.py


- `--windowed`: Hace lo mismo que `--noconsole` y es un alias de esta opción.



3. `--name`

Permite especificar el nombre del archivo ejecutable generado.


pyinstaller --onefile --name=mi_app tu_script.py



4. `--icon`

Permite especificar un icono para el ejecutable (generalmente en formato `.ico` para Windows o `.icns` para macOS).


pyinstaller --onefile --icon=mi_icono.ico tu_script.py



5. `--add-data`

Este parámetro se utiliza para incluir archivos adicionales, como imágenes, archivos de datos, etc., que tu aplicación necesita para funcionar. La sintaxis varía según el sistema operativo:


- Windows:

 pyinstaller --onefile --add-data "ruta_del_archivo;carpeta_destino" tu_script.py


- Linux/macOS:

 pyinstaller --onefile --add-data "ruta_del_archivo:carpeta_destino" tu_script.py



6. `--hidden-import`

PyInstaller a veces no detecta automáticamente todas las dependencias. Si tu aplicación falla porque falta un módulo, puedes usar `--hidden-import` para incluirlo manualmente.


pyinstaller --onefile --hidden-import nombre_modulo tu_script.py



7. `--additional-hooks-dir`

PyInstaller utiliza scripts de "hooks" para detectar dependencias especiales en ciertos módulos. Si has creado un hook personalizado, puedes especificar su directorio con esta opción.


pyinstaller --onefile --additional-hooks-dir=mi_directorio_hooks tu_script.py



8. `--collect-data` y `--collect-binaries`

Estos parámetros se utilizan para incluir automáticamente datos o binarios de módulos específicos que PyInstaller podría no detectar.


- `--collect-data`: Incluye archivos de datos de un módulo específico.


 pyinstaller --collect-data nombre_modulo tu_script.py


- `--collect-binaries`: Incluye binarios de un módulo específico.


 pyinstaller --collect-binaries nombre_modulo tu_script.py



9. `--clean`

Elimina los archivos temporales creados por PyInstaller durante el proceso de construcción, dejando una estructura de archivos más limpia.


pyinstaller --clean tu_script.py



10. `--upx-dir`

UPX es una herramienta que comprime ejecutables para reducir su tamaño. Si tienes UPX instalado, puedes usarlo con PyInstaller para comprimir el ejecutable final.


pyinstaller --onefile --upx-dir=ruta_a_upx tu_script.py



11. `--key`

Permite cifrar el código fuente de tu aplicación con una clave especificada. Esto añade una capa de seguridad, evitando que se pueda extraer fácilmente el código fuente.


pyinstaller --onefile --key=mi_clave_secreta tu_script.py



12. `--runtime-hook`

Permite especificar scripts de hook que se ejecutan durante la inicialización del ejecutable, lo que puede ser útil para configurar el entorno antes de que se ejecute el script principal.


pyinstaller --onefile --runtime-hook=mi_hook.py tu_script.py



13. `--exclude-module`

Este parámetro te permite excluir módulos específicos que podrían estar incluidos por defecto pero que no necesitas en tu aplicación final.


pyinstaller --onefile --exclude-module=tkinter tu_script.py



14. `--debug`

Genera un ejecutable con información adicional de depuración. Esto es útil si necesitas solucionar problemas durante la ejecución.


pyinstaller --onefile --debug tu_script.py



Ejemplo Completo

Vamos a crear un ejemplo práctico donde se usan varias de estas opciones:


pyinstaller --onefile --noconsole --name=mi_aplicacion --icon=icono.ico --add-data "datos.csv;." --hidden-import=requests --clean tu_script.py



Explicación:

- `--onefile`: Genera un único archivo ejecutable.

- `--noconsole`: No muestra la consola.

- `--name=mi_aplicacion`: El ejecutable se llamará `mi_aplicacion`.

- `--icon=icono.ico`: Usa `icono.ico` como icono del ejecutable.

- `--add-data "datos.csv;."`: Incluye el archivo `datos.csv` en la raíz del ejecutable.

- `--hidden-import=requests`: Asegura que el módulo `requests` esté incluido.

- `--clean`: Limpia los archivos temporales después de la construcción.



Consideraciones Finales

PyInstaller es una herramienta poderosa que simplifica la distribución de aplicaciones Python. Sin embargo, es importante probar el ejecutable resultante en el entorno donde se va a ejecutar para asegurarse de que todas las dependencias estén incluidas y que la aplicación funcione correctamente.



Limitaciones

- Tamaño del Ejecutable: Incluso con UPX, los ejecutables pueden ser bastante grandes, ya que incluyen el intérprete de Python y todas las bibliotecas necesarias.

- Compatibilidad: Aunque PyInstaller es multiplataforma, debes compilar tu ejecutable en el mismo sistema operativo donde será ejecutado (Windows, macOS o Linux).



¿No es genial aprender a usar PyInstaller?

PyInstaller es una herramienta imprescindible para convertir scripts de Python en aplicaciones ejecutables. Con una comprensión clara de sus opciones y parámetros, puedes empaquetar tus aplicaciones de manera eficiente y segura, listo para su distribución en múltiples plataformas.


¡Espero que este artículo te haya proporcionado una comprensión profunda de PyInstaller y cómo aprovecharlo al máximo en tus proyectos! ¡Feliz empaquetado!




Hay mucho más contenido sobre Python para ti


Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn


Puedes descargar GRATIS mi manual completo en pdf de Python Rápido


image


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.