Skip to content

Cómo convertir Python a EXE: Runcell, PyInstaller, Nuitka y cx_Freeze

Actualizado el

Convierte Python a EXE con la herramienta de Runcell en el navegador y compara PyInstaller, Nuitka y cx_Freeze. Incluye un ejemplo listo para ejecutar y los comandos para empaquetar en Windows.

Para convertir Python a EXE, empieza por el conversor de Python a EXE de Runcell (opens in a new tab). Añade un archivo .py, una carpeta de proyecto o un ZIP, elige el script que arranca tu aplicación, revisa sus dependencias y selecciona Build Windows EXE. Descarga el resultado y compártelo con usuarios de Windows que no tengan Python instalado.

Un EXE empaqueta tu programa junto con el runtime y los archivos que necesita. Cambiar el nombre de script.py a script.exe no hace eso. Esta guía empieza por Runcell, explica cómo un navegador genera el binario y da los comandos de tres herramientas de empaquetado locales. Runcell es un producto de Kanaries, y este es el flujo de trabajo en el navegador que recomendamos.

Elige un método para convertir Python a EXE

MétodoElígelo cuandoDónde se genera
Runcell (opens in a new tab), nuestra primera opciónTienes un script o proyecto de consola (línea de comandos) y quieres un EXE para Windows x64 sin instalar un empaquetadorEn tu navegador, en tu dispositivo
PyInstallerQuieres un comando de Python que genere una carpeta o un único ejecutable, o vas a empaquetar una aplicación con interfaz gráfica (Tkinter, PySide/PyQt)Un entorno de Python en Windows, para una build de Windows
NuitkaQuieres compilar Python y configurar la toolchain de un compilador nativoUn entorno de Python en Windows más un compilador de C compatible
cx_FreezeQuieres distribuir una carpeta de aplicación y mantener su configuración de buildUn entorno de Python en Windows, para una build de Windows

Los comandos de abajo usan Windows PowerShell. Solo los métodos locales te obligan a instalar y configurar tú mismo esas herramientas de empaquetado.

Método 1: convertir Python a EXE con Runcell

Empieza con un script pequeño y reproducible

Guarda este ejemplo como receipt.py. Imprime un recibo, calcula el total y espera a que pulses Enter, para que la ventana de consola no se cierre si la abres con doble clic. No tiene dependencias de terceros ni archivos adicionales.

items = {"Notebook": 19.50, "Cable": 8.25, "Stand": 12.25}
 
print("Receipt")
for name, price in items.items():
    print(f"{name}: ${price:.2f}")
 
print(f"Total: ${sum(items.values()):.2f}")
input("Press Enter to close...")

Si ya tienes Python instalado, prueba el código fuente antes de empaquetarlo:

python receipt.py

El total debería ser Total: $40.00. Pulsa Enter para terminar. Si es tu primer script, nuestra guía para ejecutar scripts de Python explica cómo preparar la terminal.

Añade el proyecto y genera el EXE

  1. Abre el conversor de Python a EXE de Runcell (opens in a new tab) y baja hasta el conversor en la página.
  2. Elige tu archivo receipt.py. Si se trata de una aplicación de consola que ya tienes, selecciona su directorio de proyecto o su ZIP, con los módulos y recursos que usa.
  3. Selecciona receipt.py como script de entrada. En un proyecto más grande, es el script que ejecutas normalmente para arrancar la aplicación, por ejemplo main.py.
  4. Revisa los imports, las dependencias y los archivos incluidos que se han detectado. El ejemplo del recibo no necesita paquetes adicionales. En tu propia aplicación, comprueba que los recursos necesarios y las versiones de los paquetes coinciden con el proyecto que quieres distribuir. El runtime de Runcell es Python 3.14, así que cada paquete necesita un wheel que funcione en Windows con Python 3.14 (un wheel cp314, abi3 o de Python puro).
  5. Selecciona Build Windows EXE y descarga el ejecutable generado. Ábrelo en Windows y comprueba la salida del recibo antes de compartirlo.

En nuestra prueba en el navegador, Runcell generó y descargó receipt.exe. Su cabecera de archivo lo identifica como un ejecutable de Windows x64. No ejecutamos ese EXE en Windows.

En proyectos con varios archivos, mantén intacta la estructura de directorios. Una plantilla que se carga desde templates/invoice.html tiene que estar incluida en la ruta que espera tu aplicación.

Cómo genera un navegador un EXE de Windows

El motor de empaquetado propio de Runcell combina un lanzador de Windows precompilado, un runtime de Python, los archivos de tu proyecto y sus dependencias. Ensambla esos componentes en un .exe descargable, en tu propio dispositivo. Como los componentes de Windows ya están compilados, el navegador puede construir el binario final sin ejecutar un compilador de Windows en local.

El proceso tiene dos etapas separadas:

Your Python project + dependencies
                +
Python runtime + precompiled Windows launcher
                |
                v
Runcell assembles the EXE in your browser
                |
                v
Download the file, then run it on Windows

Generar un archivo y ejecutarlo son operaciones distintas: el navegador ensambla el ejecutable y Windows ejecuta la aplicación terminada. La guía del mecanismo de Runcell (opens in a new tab) describe esta forma de empaquetar.

Qué se queda en tu dispositivo

Runcell genera el EXE en tu navegador. Si tu proyecto importa un módulo que no incluye su runtime de Windows integrado, el conversor te avisa antes de generar el EXE; quita ese import o usa uno de los empaquetadores locales que verás más abajo.

Tu código fuente y tus secretos se quedan en tu dispositivo durante la generación. El EXE terminado contiene tu código, así que no incluyas secretos que no compartirías.

Método 2: generar el EXE en local con PyInstaller

PyInstaller (opens in a new tab) reúne tu script, sus imports y el runtime de Python en una aplicación distribuible. Para obtener un EXE de Windows, ejecuta PyInstaller en Windows: genera builds para el sistema operativo en el que se ejecuta.

Abre PowerShell en la carpeta que contiene receipt.py. Crea un entorno virtual e instala PyInstaller en él. Si instalaste Python desde python.org, el lanzador py funciona aunque python no esté en el PATH, y llamar directamente al Python del entorno te ahorra el paso de activarlo:

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller --onefile receipt.py

El resultado es dist\receipt.exe. Ejecútalo desde PowerShell para ver su salida:

.\dist\receipt.exe

En tu propio proyecto, instala sus dependencias en el mismo entorno antes de generar el EXE. Si tiene un requirements.txt, usa .\.venv\Scripts\python.exe -m pip install -r requirements.txt.

La invocación -m PyInstaller, que distingue entre mayúsculas y minúsculas, está documentada en la guía de instalación (opens in a new tab). Así el empaquetador y tus dependencias quedan en el mismo entorno de Python.

Elige consola, GUI o una build en carpeta

Deja el modo consola para receipt.py, porque usa print() e input(). En una aplicación gráfica que gestiona toda la interacción en sus propias ventanas, --windowed oculta la consola. Empieza con --onedir si quieres revisar la aplicación y sus archivos de soporte en una carpeta, y después usa --onefile para tener una sola descarga. Consulta la referencia de opciones de PyInstaller (opens in a new tab).

Para incluir un directorio assets, añádelo de forma explícita:

.\.venv\Scripts\python.exe -m PyInstaller --onefile --add-data "assets:assets" receipt.py

Ese ejemplo supone que ya has creado una carpeta assets. Para los archivos de solo lectura que van dentro del paquete, resuelve las rutas de forma relativa a __file__, como explica la guía de runtime de PyInstaller (opens in a new tab). Nuestra guía de pathlib en Python explica las operaciones con rutas.

Método 3: compilar y empaquetar con Nuitka

Nuitka (opens in a new tab) compila Python y puede crear aplicaciones distribuibles. Elígelo cuando quieras controlar una build basada en un compilador. Necesitas un compilador de C compatible; para Windows, el manual menciona Visual Studio 2022 o posterior como una de las opciones. El manual también indica que MinGW64 no funciona con Python 3.13 o posterior sin un flag experimental, así que con un Python actual cuenta con instalar las Visual Studio Build Tools.

En el mismo tipo de entorno virtual, instala Nuitka y pide su modo de archivo único (onefile):

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install nuitka
.\.venv\Scripts\python.exe -m nuitka --mode=onefile receipt.py

La salida esperada en Windows es receipt.exe. Usa --mode=standalone si prefieres una carpeta de distribución. Indica uno de estos modos de forma explícita: el modo acelerado que Nuitka usa por defecto no sirve para distribuir una aplicación a un equipo sin Python. Sigue el manual oficial para configurar el compilador y las opciones específicas de cada paquete.

Método 4: crear una carpeta de aplicación con cx_Freeze

cx_Freeze (opens in a new tab) suele generar un directorio con el ejecutable y sus librerías de soporte. Elígelo cuando quieras mantener una build de aplicación configurada y distribuir la carpeta completa.

En el mismo tipo de entorno virtual, instala el paquete y ejecuta su comando de build:

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install cx-Freeze
.\.venv\Scripts\cxfreeze.exe --script receipt.py --target-dir dist

Esto sigue la referencia actual del comando cxfreeze (opens in a new tab). Distribuye la carpeta dist completa, con sus librerías, en lugar de copiar solo el EXE. Para una configuración de proyecto repetible, cx_Freeze también admite pyproject.toml y un script setup de Python.

Comprueba el resultado antes de compartirlo

Ejecuta la aplicación en un equipo Windows parecido al de las personas que la van a recibir. En este ejemplo, comprueba los precios de los artículos, el total de $40.00 y el aviso para pulsar Enter. Un equipo sin una instalación de Python aparte te sirve para confirmar que incluiste el runtime y las dependencias.

En una aplicación más grande, prueba la acción que el destinatario necesita de verdad, como seleccionar un archivo de entrada y guardar un informe. Si la ventana de consola se cierra al instante, abre el EXE desde PowerShell para leer el error. Si falta una imagen o una plantilla, revisa tanto los archivos empaquetados como la ruta con la que se cargan. Puede que los imports dinámicos tengan que incluirse de forma explícita con las opciones del empaquetador local.

Los EXE sin firmar de cualquiera de estas herramientas pueden mostrar una advertencia de Microsoft Defender SmartScreen la primera vez que alguien los abre. El destinatario selecciona More info y después Run anyway (en un Windows en español: «Más información» y «Ejecutar de todas formas»).

Preguntas frecuentes

¿Cómo convierto un archivo .py en .exe sin instalar un empaquetador?

Usa el conversor de Python a EXE de Runcell (opens in a new tab). Elige tu archivo de Python, tu carpeta o tu ZIP, selecciona el script de entrada, revisa las dependencias y genera el EXE de Windows desde tu navegador.

¿De verdad un navegador puede generar un ejecutable de Windows?

Sí. Runcell ensambla en el navegador componentes de Windows precompilados, un runtime de Python y tu aplicación en un EXE. Descargas ese archivo y lo ejecutas en Windows. El navegador no necesita ejecutar la aplicación de Windows para generar su binario.

¿La persona que ejecuta el EXE necesita tener Python instalado?

No hace falta una instalación de Python aparte si distribuyes la aplicación con su runtime y las dependencias necesarias. Runcell incluye el runtime en su flujo de empaquetado. Si generas una build en carpeta con una herramienta local, comparte la carpeta de salida completa.

¿Cuál es el comando de PyInstaller para generar un único EXE?

Ejecuta python -m PyInstaller --onefile receipt.py en el entorno de Windows donde tengas instalados PyInstaller y las dependencias de tu proyecto. La salida del ejemplo es dist\receipt.exe.

Fuentes y pruebas

El flujo de trabajo de Runcell y su mecanismo de empaquetado siguen su guía pública del producto (opens in a new tab), consultada el 4 de noviembre de 2026. Los comandos de build local siguen la documentación oficial enlazada en cada método. Ejecutamos el script de ejemplo del recibo en macOS, lo seleccionamos en el conversor de Runcell en línea, generamos y descargamos receipt.exe e inspeccionamos su cabecera PE de Windows x64. En macOS también generamos la build del script del recibo con PyInstaller 6.22.3 (--onefile) y cx_Freeze 8.7.4 para comprobar esos comandos, y contrastamos las opciones de modo de Nuitka con su salida de ayuda. Para este artículo no se ejecutó ningún EXE en Windows.

Guías relacionadas