Cómo empaquetar programas Python en binarios en Raspberry Pi 4B

No puedo instalar PyInstaller. ¿Hay alguna otra forma de empaquetar archivos Python en ejecutables binarios en una Raspberry Pi?

Puedes instalar PyInstaller usando pip

pip install pyinstaller

Referencia: https://www.cnblogs.com/wendaobiancheng/p/9772509.html

Usar este comando dará como resultado este error y la instalación no tendrá éxito.

pip install pyinstaller
error: externally-managed-environment

× Este entorno está gestionado externamente
╰─> Para instalar paquetes de Python a nivel del sistema, intenta usar apt install
    python3-xyz, donde xyz es el paquete que estás tratando de instalar.

    Si deseas instalar un paquete de Python que no está empaquetado por Debian,
    crea un entorno virtual usando python3 -m venv path/to/venv.
    Luego utiliza path/to/venv/bin/python y path/to/venv/bin/pip. Asegúrate de tener
    instalado python3-full.

    Para obtener más información visita http://rptl.io/venv

nota: Si crees que esto es un error, contacta al proveedor de tu instalación de Python o de tu distribución del sistema operativo. Puedes omitir esta restricción, asumiendo el riesgo de dañar tu instalación de Python o del sistema operativo, pasando --break-system-packages.
sugerencia: Consulta la PEP 668 para conocer la especificación detallada.

Usando este comando: sudo apt install python3-pyinstaller

No se puede encontrar el paquete de instalación correspondiente.
Leyendo las listas de paquetes… Hecho
Construyendo el árbol de dependencias… Hecho
Leyendo la información de estado… Hecho
E: No es posible localizar el paquete python3-pyinstaller

https://www.cnblogs.com/clark1990/p/17942952

Se recomienda instalar usando pipx

En una Raspberry Pi (Raspberry Pi 4B), si no puedes usar PyInstaller, la alternativa más potente es Nuitka. A diferencia de PyInstaller, que simplemente “empaqueta” el código, Nuitka convierte tu código Python en código C y lo compila en un archivo binario de máquina real.

A continuación se presentan varios métodos comunes para empaquetar Python en archivos binarios en una Raspberry Pi:


1. Nuitka (el más recomendado: alto rendimiento, compilación real)

Nuitka es actualmente una herramienta muy popular en la comunidad Python, especialmente adecuada para entornos Linux como la Raspberry Pi. Los archivos binarios generados por Nuitka suelen ejecutarse más rápido que el código Python nativo.

Pasos de instalación:

  1. Primero instala el compilador C necesario (normalmente viene preinstalado en el sistema de Raspberry Pi, pero se recomienda actualizarlo):
sudo apt update
sudo apt install build-essential python3-dev
  1. Instala Nuitka:
pip install nuitka

Comando para empaquetar:

Ejecuta este comando desde el directorio de tu programa:

python3 -m nuitka --standalone --onefile --remove-output your_script.py
  • --standalone: Incluye todas las bibliotecas dependientes.
  • --onefile: Empaqueta todo en un único archivo ejecutable.
  • --remove-output: Elimina la carpeta temporal de código C generada tras la compilación.

2. cx_Freeze (alternativa madura y estable)

Si consideras que el tiempo de compilación de Nuitka es demasiado largo (debido a sus complejas optimizaciones), cx_Freeze es una opción más cercana a PyInstaller.

Instalación:

pip install cx_Freeze

Uso:

Crea un archivo llamado setup.py:

from cx_Freeze import setup, Executable

setup(
    name = "Mi programa",
    version = "1.0",
    description = "Descripción",
    executables = [Executable("your_script.py")]
)

Luego ejecuta en la terminal:

python3 setup.py build

Esto generará en la carpeta build un directorio que contiene el archivo ejecutable junto con sus dependencias.


3. Shiv (solución Zipapp: ligera)

Si tu objetivo es simplemente distribuir “un solo archivo”, sin necesidad estricta de “cifrado o binario de máquina”, Shiv es una excelente opción. Utiliza la funcionalidad nativa de Python zipapp.

Uso:

pip install shiv
shiv -e your_module.main -o my_app .

Esto comprimirá tu código y todas sus dependencias en un único archivo .pyz (en Linux se puede hacer directamente ejecutable con ./my_app). La ventaja es que el empaquetado es extremadamente rápido y muy estable.


4. ¿Por qué no se puede instalar PyInstaller? (soluciones comunes)

El fallo al instalar PyInstaller en Raspberry Pi suele deberse a la falta de binutils o de las bibliotecas de desarrollo de Python. Si deseas intentarlo nuevamente, primero ejecuta:

sudo apt install python3-dev binutils libffi-dev
pip install pyinstaller

Si el mensaje de error incluye referencias a arm-linux-gnueabihf-gcc, normalmente significa que falta el paquete build-essential.


Comparación de métodos

Herramienta Principio Ventajas Desventajas
Nuitka Compila a código C Alta velocidad de ejecución, difícil de descompilar, binario real Tiempo de compilación largo, compatibilidad con bibliotecas complejas puede requerir ajustes
cx_Freeze Congela el entorno (Freeze) Configuración flexible, buena portabilidad entre plataformas Genera una carpeta (a menos que se combine con AppImage)
Shiv Archivo comprimido (Zipapp) 100% compatible con todas las bibliotecas, empaquetado extremadamente rápido La máquina destino debe tener instalado el intérprete Python

Recomendación:
Si buscas seguridad y alto rendimiento, utiliza Nuitka; si deseas empaquetar rápidamente y no te importa que la máquina destino tenga Python instalado, usa Shiv.