Curso
En este artículo, te explicaré algunos de los casos en los que merece la pena convertir tu archivo Python en un ejecutable. También mostraré cómo convertir un archivo Python en un archivo ejecutable utilizando tres bibliotecas Python: Pyinstaller, Nuitka y auto-py-to-exe.
Clona este repositorio de Github para seguir este tutorial.
¿Por qué convertir Python a .exe?
Los archivos ejecutables, archivos guardados con la extensión .exe, se utilizan para instalar o ejecutar aplicaciones de software en ordenadores con el sistema operativo Windows. El archivo que permite a un ordenador con Windows ejecutar una aplicación es el archivo de información de programa ( .exe ).
Hay varias razones por las que es posible que desees convertir un programa Python en un archivo ejecutable. Veamos algunos ejemplos:
Actividad maliciosa
Desafortunadamente, a algunas personas en Internet les gusta difundir software malicioso para infectar los dispositivos de otras personas y robar su información. Una forma de contrarrestar a estas personas es evitar caer en sus estafas, lo que significa no descargar ni abrir ciegamente archivos .exe que no provengan de una fuente fiable.
Accesibilidad
Otra razón por la que es posible que desees convertir un archivo Python en un ejecutable es para compartir una aplicación con otros usuarios. Un programa típico de Python puede constar de varias dependencias que otro usuario tendría que instalar antes de poder ejecutar el programa. ¿Qué pasa si la persona no sabe programar? En tales casos, esperar que un usuario aprenda a programar antes de utilizar una aplicación puede ser poco razonable. Convertir un archivo Python en un archivo ejecutable permite a los usuarios acceder a tu programa sin necesidad de saber Python.
Protección del código fuente
Pero incluso si sabes cómo programar, convertir un archivo Python en un archivo ejecutable puede ser una buena opción para evitar que te roben el código. Un archivo ejecutable evita que se robe el código, ya que crea una versión compilada de tu código fuente, lo que hace que sea más difícil de comprender que el código fuente real.
Programación de tareas
También puedes programar una tarea en tu ordenador para ejecutar un archivo .exe a una hora determinada.
Aprende Python desde cero
Cómo convertir un script de Python en un archivo .exe
Ahora que ya sabes qué son los archivos .exe y por qué es posible que desees convertir un archivo Python a un archivo .exe, veamos cómo hacerlo en Python. En esta sección, trataremos tres marcos: pyinstaller, nuitka y auto-py-to-exe.
Una cosa que hay que tener en cuenta es que auto-py-to-exe tiene problemas de compatibilidad conocidos con Python 3.11 y versiones posteriores, y por lo general solo es fiable hasta Python 3.10, a menos que utilices versiones más recientes específicas y dependencias cuidadosamente adaptadas.
Dicho esto, empecemos.
Preparación del guion
Esta demostración utilizará el conjunto de datos abiertos de Airbnb de la ciudad de Nueva York.
Antes de que los científicos de datos puedan analizar un conjunto de datos, estos deben formatearse para que sean compatibles con las herramientas que utilizan. Por lo tanto, la creación de un esquema de validación define de manera eficaz todas las validaciones que se aplican a cada campo de forma declarativa. Este proceso puede ser bastante repetitivo. Para evitar que nuestros científicos de datos se dediquen a tareas repetitivas, hemos creado un script de validación automatizado que se ejecuta periódicamente.
Nota: Ten mucho cuidado al utilizar rutas relativas si tu script debe leer datos. Es mejor que utilices rutas absolutas para garantizar que tu ejecutable funcione como se espera.
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
Nota: hemos copiado y pegado este script en los directorios pyinstaller, nuitka y auto-py-to-exe.
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Cada directorio tiene su propio entorno virtual en el que hemos instalado los requisitos: consulta los requisitos de pyinstaller o los requisitos de auto-py-to-exe. Si estás siguiendo el código, asegúrate de crear un entorno virtual en el directorio pyinstaller y en el directorio auto-py-to-exe.
A alto nivel, el script anterior contiene una función (más información sobre cómo escribir funciones en Python ) que lee un conjunto de datos y luego define el formato esperado de campos específicos en los datos. El siguiente paso es convertir este script de Python en un archivo ejecutable que se pueda ejecutar periódicamente para generar un conjunto de datos formateado.
Método 1: Pyinstaller
Pyinstaller te permite convertir rápidamente un archivo Python en un archivo ejecutable desde tu terminal. Una vez que hayas creado tu entorno virtual e instalado los requisitos para tu script (incluido pyinstaller), simplemente abre el terminal y navega hasta el directorio donde se encuentra el archivo Python que deseas convertir.
El siguiente paso es ejecutar el siguiente comando:
pyinstaller --onefile validation.py
Inicialmente, verás varios registros, el último de los cuales dirá algo así como «completado con éxito», siempre que el archivo ejecutable se haya creado correctamente.

Figura 1: Registros que muestran que se ha creado el archivo ejecutable y que se ha completado correctamente.
Al completar esta ejecución, se crearán dos nuevos directorios, build y dist, en el mismo directorio donde se encuentra el archivo Python. En el directorio dist, encontrarás el script validation.exe.

Figura 2: Un GIF que muestra la ejecución de validation.exe en un conjunto de datos.
Para ejecutar el script, simplemente haz clic en él. Esto abrirá una consola que te pedirá que introduzcas el nombre del archivo de datos sobre el que deseas ejecutar la validación. Una vez que introduzcas el nombre del archivo, la consola se cerrará y los datos validados se crearán en el mismo directorio que el archivo validation.exe (véase la figura 2).
Método 2: Nuitka
Nuitka es otra opción que vale la pena considerar. A diferencia de PyInstaller, que agrupa tu script de Python con el intérprete de Python, Nuitka compila tu código Python en código C. Esto se traduce en una mejor protección del código fuente, una ejecución potencialmente más rápida y, a menudo, archivos de menor tamaño. La contrapartida es un tiempo de compilación más largo y una mayor complejidad de configuración.
Instalación y configuración
Después de crear un entorno virtual e instalar Nuitka utilizando pip install nuitka, debes asegurarte de que tu sistema dispone de un compilador C. El compilador que necesitas depende de tu sistema operativo:
-
Windows: Descarga e instala Microsoft Visual C++ Build Tools (gratuito) desde el sitio web de Visual Studio, o utiliza MinGW.
-
macOS: Instala las herramientas de línea de comandos de Xcode con
xcode-select --install -
Linux: GCC suele venir preinstalado; si no es así, instálalo a través de tu gestor de paquetes.
Una vez instalado, Nuitka detectará automáticamente tu compilador. Si tienes problemas, asegúrate de que el compilador está en tu sistema PATH.
Conversión del script de validación con Nuitka
Convirtamos el mismo script de validación de Airbnb de Nueva York utilizando Nuitka, tal y como hicimos con PyInstaller y auto-py-to-exe. Para compilar nuestro script en un ejecutable, ejecuta:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
Analicemos cada bandera:
-
--onefile: Crea un único archivo ejecutable (en lugar de un directorio con múltiples archivos y dependencias). -
--follow-imports: Incluye automáticamente todos los módulos que importa tu script. -
--include-package=pandas: Incluye explícitamente el paquete pandas (algunos paquetes no se detectan automáticamente, por lo que esto garantiza que se incluya).
A diferencia de PyInstaller, que tarda unos 30 segundos en completarse, Nuitka tardará bastante más, normalmente entre 5 y 15 minutos, dependiendo de la complejidad del código y la velocidad del sistema. Verás el resultado de la compilación en la terminal, que muestra el progreso a lo largo de la etapa de compilación en C.
Una vez completado, aparecerá un mensaje indicando que el archivo ejecutable se ha creado correctamente. El ejecutable compilado se crea en el mismo directorio que el archivo validation.py.
Haz doble clic en validation.exe o ejecútalo desde la línea de comandos. Se abrirá una ventana de consola que te pedirá que introduzcas un nombre de archivo, igual que con PyInstaller. Después de escribir AB_NYC_2019.csvy pulsar Intro, se ejecuta la validación, se cierra la consola y se crea un nuevo archivo validated_ab_nyc_2019.csv en el mismo directorio, exactamente igual que en la versión PyInstaller.
Método 3: auto-py-to-exe
El primer paso para crear un archivo ejecutable con auto-py-to-exe es ejecutarlo con el siguiente comando:
auto-py-to-exe
Esto debería mostrar una interfaz gráfica de usuario (GUI) que nos ayudará a convertir nuestro archivo Python en un archivo ejecutable.

Figura 3: La interfaz gráfica de usuario volvió a aparecer tras ejecutar el comando auto-py-to-exe.
Nota: si no funciona, asegúrate de haber creado un entorno virtual en el directorio auto-py-to-exe y de haber instalado el archivo requirements.txt en tu entorno virtual utilizando el siguiente comando: pip install -r requirements.txt.
La interfaz gráfica de usuario tiene varios campos que debemos rellenar. Echemos un vistazo a cada uno y analicémoslos:
- Ubicación específica: En este campo, debes añadir la ubicación del script del archivo Python que deseas convertir en un ejecutable.
- Onefile: Aquí es donde seleccionas si deseas crear un único directorio o archivo. Un único directorio contendrá todas las dependencias necesarias para ejecutar tu script y un archivo ejecutable, mientras que si seleccionas «Un archivo» se creará un único archivo ejecutable.
- Ventana de la consola: La decisión entre una ventana de consola «basada en consola» o «basada en ventana» depende de lo que devuelva tu script. Por ejemplo, el script que hemos creado anteriormente requiere que el usuario introduzcas un nombre de archivo. Por lo tanto, se recomienda la solución «basada en consola», ya que esta abrirá la consola después de ejecutar el archivo ejecutable. Si no es necesario mostrar los resultados de la consola después de ejecutar el archivo ejecutable, entonces «Basado en ventana» es una buena opción.
También se nos ofrecen otras opciones para configurar la creación de nuestro archivo ejecutable (por ejemplo, añadir iconos, archivos adicionales y mucho más). En esta sección, también puedes modificar la ruta donde deseas exportar los archivos generados por tu archivo ejecutable: para ello, selecciona la opción «Configuración» y busca el directorio de salida que prefieras. El último paso es seleccionar «Convertir .py a .exe» para convertir nuestro archivo Python.
Mira el GIF de la figura 4 para ver cómo hemos configurado nuestro archivo ejecutable.

Figura 4: Un GIF que muestra la configuración para auto-py-to-exe.
Cuando regresemos al directorio auto-py-to-exe, habrá un directorio llamado output: ahí es donde se encuentra el archivo validation.exe. Selecciona el archivo para ejecutarlo, lo que abrirá una consola que te pedirá que introduzcas un nombre de archivo:

Figura 5: La consola volvió tras ejecutar el archivo de validación ejecutable.
Simplemente ingresa el nombre del archivo (en este ejemplo, « AB_NYC_2019.csv ») y presiona Intro. Esto cerrará la consola y creará un nuevo archivo en el directorio de salida (donde se encuentra el archivo ejecutable) llamado validated_ab_nyc_2019.csv.
PyInstaller frente a Nuitka
A continuación se muestrauna comparación entre Nuitka y PyInstaller con el mismo script de validación, junto con auto-py-to-exe como alternativa GUI:
|
Métrico |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
Tamaño del ejecutable |
promedio |
promedio |
Entre un 20 y un 30 % más pequeño. |
|
Tiempo de construcción |
promedio |
promedio |
16 veces más largo |
|
Tiempo de arranque |
~2 segundos |
~2 segundos |
~1 segundo |
|
Tiempo de ejecución (tarea de validación) |
~3 segundos |
~3 segundos |
~2,5 segundos |
|
Protección del código fuente |
Moderado |
Moderado |
Excelente |
|
Python 3.8-3.10 |
✅ Excelente |
✅ Excelente |
✅ Excelente |
|
Python 3.11+ |
✅ Excelente |
⚠️ Problemas conocidos |
✅ Excelente |
PyInstaller y Nuitka ofrecen compatibilidad fiable con todas las versiones modernas de Python, mientras que auto-py-to-exe tiene problemas de compatibilidad conocidos con Python 3.11 y versiones posteriores. Nuitka produce ejecutables más pequeños y rápidos con una protección IP superior, pero el proceso de compilación es aproximadamente 16 veces más lento que PyInstaller.
Conclusión
En este artículo, has aprendido:
- ¿Qué es un archivo Python?
- Qué es un archivo ejecutable y por qué puede ser útil
- Cómo convertir un script de Python en un ejecutable utilizando pyinstaller, una herramienta muy útil para quienes se sienten más cómodos con las operaciones de línea de comandos.
- Cómo convertir un script de Python en un ejecutable utilizando auto-py-to-exe, que proporciona a los usuarios una interfaz gráfica de usuario (GUI) para configurar cómo se debe crear el archivo ejecutable.
Obtén más información sobre cómo puedes aprovechar Python para dedicarte a la ciencia de datos en DataCamp, en el programa de científico de datos asociado con Python.
Preguntas frecuentes
¿Puedes incluir archivos adicionales (por ejemplo, imágenes, archivos de configuración) en el ejecutable?
Sí, las tres herramientas te permiten agrupar archivos adicionales necesarios para tu script. Para PyInstaller y Nuitka, puedes utilizar la opción --add-data para especificar los archivos que deseas incluir. En auto-py-to-exe, hay una opción en la interfaz gráfica de usuario para añadir archivos en «Archivos adicionales». Asegúrate de especificar correctamente las rutas relativas o absolutas para que el ejecutable pueda acceder a estos archivos.
¿Cómo puedes añadir un icono personalizado al archivo ejecutable?
Puedes añadir un icono personalizado a tu ejecutable especificando un archivo .ico. Para PyInstaller, utiliza el indicador « --icon » seguido de la ruta de acceso a tu archivo .ico. En auto-py-to-exe, puedes configurar la ruta del icono en el campo «Icono» dentro de la interfaz gráfica de usuario. Nuitka también admite la bandera « --windows-icon-from-ico » (Desactivar el controlador de pantalla). Ten en cuenta que el archivo del icono debe estar en formato .ico.
¿Por qué tu archivo ejecutable es tan grande y cómo puedes reducir su tamaño?
Los archivos ejecutables pueden incluir todas las dependencias, bibliotecas y el intérprete de Python, lo que puede hacer que sean muy grandes. Para reducir el tamaño:
- Utiliza la opción «
--onefile» (Empaquetar todo en un único archivo) en PyInstaller o Nuitka para agrupar todo en un solo archivo. - Excluye las bibliotecas innecesarias utilizando la opción «
--exclude-module» (Excluir bibliotecas no utilizadas) en PyInstaller o Nuitka. - Considera la posibilidad de utilizar herramientas como UPX para comprimir el ejecutable resultante (funciona con PyInstaller y auto-py-to-exe).
- Considera la posibilidad de utilizar Nuitka, que suele generar ejecutables entre un 20 % y un 30 % más pequeños que PyInstaller.
¿Puedo crear un ejecutable para un sistema operativo diferente?
PyInstaller, auto-py-to-exe y Nuitka son específicos para cada plataforma. Para crear un ejecutable para un sistema operativo diferente, debes utilizar herramientas de compilación cruzada o configurar una máquina virtual o un contenedor para el sistema operativo de destino. Por ejemplo, para crear un ejecutable de Windows en Linux, puedes utilizar Wine o Docker con un entorno Windows.
¿Cuáles son las alternativas a pyinstaller y auto-py-to-exe?
Otras herramientas para crear ejecutables incluyen:
- cx_Freeze: Una herramienta multiplataforma para crear ejecutables.
- py2exe: Una herramienta específica para Windows que permite crear ejecutables a partir de scripts de Python.

