Por qué las aplicaciones de Python independientes son difíciles de construir
Pasas semanas construyendo una herramienta de Python útil. Funciona perfectamente en tu máquina. Intentas compartirla con un compañero de equipo. Falla porque no tiene Python instalado.
Este es un problema común. Empaquetar Python en un solo archivo que funcione en cualquier lugar es difícil. No se trata solo de la falta de un archivo de requisitos.
El problema comienza con la forma en que funciona Python.
Python es un lenguaje dinámico. Toma muchas decisiones mientras el programa se ejecuta. Puede importar librerías sobre la marcha. Puede cambiar la forma en que funcionan las funciones mientras se ejecutan.
Los lenguajes compilados como Go o Rust deciden todo antes de que el programa comience. Eliminan el código que no se utiliza para crear archivos pequeños y rápidos.
Python no puede hacer esto. No puedes predecir fácilmente qué partes del entorno de ejecución necesitará tu código. Para asegurar que funcione, debes incluir todo el entorno de ejecución de Python.
Esto conduce al problema de las librerías.
En otros lenguajes, los compiladores utilizan tree-shaking para mantener los archivos pequeños. Python no puede usar esto. Debes incluir cada dependencia y cada subdependencia. También debes incluir archivos binarios compilados. Esto hace que tu pequeño script se convierta en un paquete de 300 MB.
Tienes tres opciones principales:
- Requerir Python en la máquina de destino. Esto funciona para desarrolladores, pero falla para los usuarios generales.
- Empaquetar el intérprete. Herramientas como PyInstaller o Nuitka empaquetan el entorno de ejecución en tu aplicación. PyInstaller es popular. Nuitka convierte tu código a C para mejorar la velocidad.
- Usar Docker. Esto proporciona una fiabilidad total al incluir toda la capa del sistema operativo. Funciona bien para servidores, pero crea archivos grandes.
Nuevas herramientas como PyApp ofrecen un punto medio. Utilizan un pequeño lanzador para descargar la versión de Python adecuada para ti.
Cómo elegir:
• Para equipos técnicos: Usa un entorno virtual y un archivo de requisitos. • Para no desarrolladores: Usa PyInstaller. Es el método más probado. • Para servidores y pipelines de datos: Usa Docker. Aquí la fiabilidad importa más que el tamaño del archivo. • Para aplicaciones de escritorio donde la velocidad importa: Usa Nuitka.
Python no va a cambiar su naturaleza fundamental para solucionar esto. El lenguaje seguirá siendo dinámico. Debemos confiar en mejores herramientas para cerrar la brecha.
Fuente: https://dev.to/azadarjoe/why-standalone-python-apps-are-so-hard-to-build-3g31