Cómo generar un fichero ejecutable único para nuestra aplicación Python, incluyendo las librerías/módulos que requiera en sistemas operativos Linux.
Requisitos para generar ejecutables de nuestras aplicaciones Python en Linux
Instalar Python y pip
Deberemos disponer de Python instalado en el equipo en el que queramos generar los ejecutables, también necesitaremos pip. En el siguiente artículo explicamos cómo instalar Python en Linux CentOS y Linux Ubuntu:
Instalar pyinstaller con pip
Instalaremos en primer lugar los siguientes paquetes, necesarios para la ejecución de pyinstaller:
yum install bcc
yum install python-devel
Alguno de estos paquetes, como bcc, ya estará instalado al tener Python, que lo requiere.
Instalaremos pyinstaller, que será el paquete que nos permitirá generar ejecutables de nuestras aplicaciones Python. Para ello usaremos el siguiente comando:
1 |
pip3 install pyinstaller |
Si tenemos varias versiones de Python en el equipo y queremos asegurarnos de que PyInstaller se instala para una versión concreta, podemos ejecutar el siguiente comando:
1 |
python3.9 -m pip install pyinstaller |
Que lo instalará para Python 3.9.
Para verificar que está correctamente instalado ejecutaremos:
1 |
pyinstaller --version |
Que nos devolverá la versión de pyinstaller instalada, en nuestro caso la 4.9:
Comprobar las dependencias necesarias de nuestra aplicación Python
En función del código fuente Python usado para nuestra aplicación, puede que requiera de librerías/módulos adicionales que no se incluyen en Python por defecto. Por lo tanto, necesitaremos instalarlas.
Para comprobar de forma rápida si nuestra aplicación requiere de alguna librería/módulo, accederemos a la carpeta donde tengamos los ficheros .py de la aplicación y la ejecutaremos con:
1 |
python3.9 infopc.py |
(En el ejemplo, nuestra aplicación tiene el fichero infopc.py).
Si requiere de alguna librería/módulo, nos lo indicará:
En el caso de nuestra aplicación infopc.py, nos avisa de que requiere de alguna librería adicional:
[root@srvmysql infopc]# python3.9 infopc.py
Traceback (most recent call last):
File «/proyectoa_python/infopc/infopc.py», line 4, in
import psutil
ModuleNotFoundError: No module named ‘psutil’
Nuestro programa Python requiere de la librería/módulo psutil, que tendremos que instalar. Para instalar una librería/módulo usaremos pip de Python (que tendremos instalado en el equipo). Para instalar psutil ejecutaremos el siguiente comando:
1 |
pip3 install psutil |
En caso de que el comando anterior falle, con el error:
1 2 3 4 |
Running setup.py bdist_wheel for psutil ... error psutil/_psutil_common.c:9:20: error fatal: Python.h: No existe el fichero o el directorio Failed building wheel for psutil Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-wmdos0_l/psutil/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-9owhxzxn-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-wmdos0_l/psutil/ |
Podremos realizar la instalación con el siguiente comando, para instalar la librería psutil en la versión de Python que estemos utilizando:
1 |
python3.9 -m pip install psutil |
Una vez instaladas las dependencias, verificaremos que la aplicación Python se ejecuta con:
1 |
python3.9 infopc.py |
Crear fichero ejecutable de aplicación Python en Linux con pyinstaller
Antes de crear el ejecutable, nos aseguraremos de tener por defecto la versión de Python correcta. Para Python 3.9, ejecutaremos el siente comando:
1 |
update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 |
Para crear un fichero ejecutable de nuestra aplicación Python, accederemos a la carpeta de la aplicación (donde tengamos los ficheros con el código fuente .py):
1 |
cd /proyectoa_python/infopc/ |
Y ejecutaremos el siguiente comando:
1 |
pyinstaller infopc.py --onefile |
Teniendo en cuenta que para pyinstaller deberemos indicar el fichero principal .py de nuestra aplicación, si tenemos varios.
Tras generar el ejecutable, pyinstaller habrá creado una carpeta build, otra carpeta dist y una tercera __pycache__:
En la carpeta dist es donde habrá creado el ejecutable de nuestra aplicación Python:
Este ejecutable estará listo para que lo distribuyamos en cualquier equipo Linux y funcione directamente, transfiriendo el fichero generado infopc a cualquier otro equipo:
1 |
scp infopc root@192.168.1.5:/proyectoa_python/infopc/ |
Y ejecutándolo con:
1 |
./infopc |