Cuando creamos un script o una aplicación con Python para que lo utilicen personas sin conocimientos en programación, lo más probable es que no sepan cómo ejecutarlo. Además, si son usuarios de Windows ni siquiera tendrán instalado el intérprete de Python. Es decir, nos surge un problema con la distribución de dicho script.
En otro artículo ya hemos tratado cómo ejecutar código Python, y hemos visto que, si fuera necesario, tenemos que instalar Python, después crear un entorno virtual, luego instalar las dependencias con pip, y finalmente ejecutar el código en la Terminal o en algún entorno de desarrollo. Todo un proceso que puede ser un poco complicado si no estás familiarizado con el desarrollo en Python.
En este artículo vamos a ver dos aplicaciones distintas que solucionan este problema. Por un lado PyInstaller, el cual se ejecuta desde la Terminal, y por otro Auto PY to EXE, su versión con interfaz gráfica para Windows. Con cualquiera de estas dos herramientas podemos crear archivos ejecutables para distribuir nuestras aplicaciones a usuarios que no son desarrolladores, y que podrán ejecutarlas sin necesidad de hacer ninguna instalación.
PyInstaller
PyInstaller incorpora el intérprete de Python y todas las dependencias del código dentro de un archivo ejecutable. Pero para poder utilizarlo, primero tenemos que instalarlo como si fuera una dependencia más de nuestro código Python. El comando para instalarlo es el siguiente:
$ pip install pyinstaller
Notar que aunque no lo haya mencionado, es preferible hacer dicha instalación dentro de un entorno virtual específico para el proyecto en cuestión.
Uso de PyInstaller
Una vez tenemos instalado PyInstaller, su uso es como el de una aplicación de línea de comandos. Es decir, lo utilizamos desde el CMD o PowerShell en Windows y desde la Terminal en macOS y Linux. Dentro del directorio raíz de nuestra aplicación, si nuestro fichero Python que contiene la entrada a nuestro programa se llama ejemplo.py
, el comando para convertirlo en un fichero ejecutabe es el siguiente:
$ pyinstaller ejemplo.py
Al ejecutar dicho comando, PyInstaller nos mostrará un montón de mensajes por la consola mientras crea el fichero ejecutable.
Resultado de ejecutar PyInstaller
Al finalizar la ejecución, veremos que se nos han generado las siguientes dos carpetas:
build
: Contiene metadatos generados por PyInstaller para crear el archivo ejecutable. Raramente vamos a necesitar estos archivos, así que podemos ignorar esta carpeta.dist
: Esta carpeta a su vez contiene otra carpeta con el nombre de nuestro script,ejemplo
en nuestro caso; y es en esta carpeta es donde encontramos nuestro fichero ejecutable, junto con otras dependencias. Por tanto, esta última carpeta es lo que tenemos que distribuir. Aunque como veremos a continuación podemos indicar a PyInstaller que nos genere un sólo fichero ejecutable.
Personalizar la compilación
PyInstaller tiene diferentes opciones que le podemos pasar al ejecutarlo, las cuales modifican el resultado obtenido. Todas estas opciones se pueden combinar entre si, y a continuación vamos a ver las principales.
Opción --onefile
Como hemos visto anteriormente, PyInstaller genera por defecto el fichero ejecutable y las dependencias por separado. Con esta opción le indicamos que compile nuestra aplicación en un único fichero ejecutable. Para ello utilizamos el siguiente comando:
$ pyinstaller --onefile ejemplo.py
Opción --windowed
El ejecutable creado por PyInstaller muestra por defecto la consola. En caso que nuestra aplicación tenga una interfaz gráfica, podemos indicarle que no muestre la consola al usuario. Esto lo podemos hacer con el siguiente comando:
$ pyinstaller --windowed ejemplo.py
Opción --icon
Este parámetro aplica un icono al archivo ejecutable. Dicho icono tiene que ser en formato .ico
. Lo podemos especificar con el siguiente comando:
$ pyinstaller --icon logotipo.ico ejemplo.py
Opción --add-data
En caso que nuestra aplicación requiera utilizar ficheros externos, los podemos añadir con esta opción. El fichero se debe especificar en el formato fuente:destino, donde la fuente es la ruta en nuestra computadora del archivo a añadir, y el destino la ruta del fichero dentro de nuestra aplicación. Notar que la fuente y el destino se tienen que separar por dos puntos (:). Un ejemplo de uso de este parámetro es el siguiente:
$ pyinstaller --add-data img/logotipo.jpg:img ejemplo.py
En este caso añadimos la imagen logotipo.jpg
que se encuentra en el directorio img
, dentro de la raíz de nuestro proyecto, a la carpeta img
del ejecutable que vamos a crear.
En caso que necesitemos añadir más de un fichero, podemos utilizar esta opción múltiples veces.
Limitaciones de PyInstaller
Una cosa que no hemos mencionado hasta ahora es que PyInstaller solo puede compilar ficheros ejecutables para el mismo tipo de sistema operativo en el que se ejecuta. Es decir, sólo podemos crear archivos ejecutables .exe
para Windows utilizando PyInstaller desde Windows. Y lo mismo sucede con macOS y Linux. Por tanto, para multiples sistemas operativos vamos a necesitar una computadora para cada uno de ellos.
Auto Py to EXE
Auto Py to EXE es una aplicación para Windows que, como indica su nombre, nos permite crear ejecutables EXE
a partir de scripts de Python .py
. En concreto se trata de una aplicación gráfica basada en PyInstaller. Por tanto, ofrece las mismas opciones de configuración que hemos visto anteriormente, y, al tratarse de una aplicación para Windows, los ejecutables creados sólo van a funcionar en esta plataforma.
La podemos instalar como cualquier otro paquete de Python:
$ pip install auto-py-to-exe
Y abrirla tecleando su nombre en la consola:
$ auto-py-to-exe
Su uso es muy intuitivo, tal y como podemos ver en la siguiente imagen. Simplemente tenemos que indicarle la ruta del script que queremos compilar y seleccionar las opciones deseadas. Por ejemplo, si queremos que el script se compile en un sólo archivo, que se muestre o no la consola, etc.
Conclusiones
En este artículo hemos visto cómo crear ficheros ejecutables a partir de un script de Python. Para ello tenemos que instalar y utilizar PyInstaller, si lo queremos hacer todo desde la terminal; o Auto Py to EXE si preferimos la comodidad de una interfaz gráfica.
En cualquier caso, es recomendable probar que el ejecutable que hemos creado funciona en una computadora distinta, con el mismo sistema operativo, y a ser posible que no tenga Python instalado. Una vez hecha la comprobación ya podemos asegurar que nuestro ejecutable está listo para ser distribuido.