Cómo convertir un script Python en .EXE con PyInstaller (Guía completa paso a paso)

convertir script python a

En esta guia documento el proceso completo para convertir un script de Python en un archivo .EXE en Windows, de modo que puedas ejecutarlo con doble clic sin abrir Spyder y sin depender de correr el .py. Incluye soluciones reales a problemas que aparecieron durante la compilacion: conflictos de paquetes en Anaconda, falta de espacio en disco y el bloqueo de Windows Defender.

Que hace el .EXE que construimos

  • Busca imagenes .png en la misma carpeta donde esta el .exe.
  • Convierte cada PNG a .jpg.
  • Redimensiona a 960 px de ancho y mantiene la proporcion (alto automatico).
  • Crea una carpeta resultado si no existe y guarda ahi las conversiones.
  • Sobrescribe si ya existe un JPG con el mismo nombre.
  • Maneja transparencias componiendo sobre fondo blanco.

Requisitos

  • Windows 10 u 11
  • Python 3.x instalado (en nuestro caso Python 3.10)
  • Acceso a CMD (Simbolo del sistema)

Paso 1: Verificar que estas en CMD y que Python es 3.x

Para compilar un .EXE debes usar CMD, donde el prompt se ve como C:\Users\TuUsuario>. Si ves >>> estas dentro del interprete de Python y los comandos como cd o pip no funcionaran.

python --version

Debe responder algo como Python 3.10.x. Si se abrio el interprete (sale >>>), cierralo con:

exit()

Paso 2: Instalar PyInstaller y Pillow

Pillow se usa para abrir y convertir imagenes. PyInstaller es el empaquetador que genera el .EXE.

Los mejores detectores de texto con IA probados en 2025Los mejores detectores de texto con IA probados en 2025
python -m pip install pyinstaller pillow

Paso 3: Ir a la carpeta donde esta tu script

Ubica tu archivo .py (por ejemplo script_png_to_jpg.py) y entra a esa carpeta con cd. Si tu carpeta tiene espacios, usa comillas.

cd "C:\Users\Cesar\Downloads\script png to jpg"

Paso 4: Crear el .EXE

Opcion A: Crear el .EXE sin ventana negra (sin consola)

python -m PyInstaller --clean --onefile --noconsole script_png_to_jpg.py

Cuando finaliza correctamente veras un mensaje como Building EXE from EXE-00.toc completed successfully. y el .EXE quedara en la carpeta dist.

Opcion B: Crear el .EXE con ventana negra (con consola, util para depurar)

python -m PyInstaller --clean --onefile script_png_to_jpg.py

Donde queda el .EXE

Dentro de la misma carpeta del proyecto se crea:

  • dist\script_png_to_jpg.exe

Como usar el .EXE

  1. Copia script_png_to_jpg.exe dentro de la carpeta donde estan tus PNG.
  2. Haz doble clic al .EXE.
  3. Se creara resultado si no existe y ahi apareceran los JPG convertidos.
  4. Si ya existian archivos con el mismo nombre se sobrescriben.

Script final portatil

Este script toma como base la carpeta donde esta el .EXE (o el .py cuando lo ejecutas normal), crea resultado si no existe, convierte PNG a JPG, redimensiona a 960 px de ancho y sobrescribe si ya hay archivos con el mismo nombre.

Los mejores detectores de texto con IA probados en 2025Los mejores detectores de texto con IA probados en 2025
WhatsApp para ciegos: fácil en computadoras y Atajos de Teclado OcultosWhatsApp para ciegos: fácil en computadoras y Atajos de Teclado Ocultos
from pathlib import Path
from PIL import Image
import sys

ANCHO_OBJETIVO = 960
CALIDAD_JPG = 90

def carpeta_del_ejecutable_o_script() -> Path:
    if getattr(sys, "frozen", False):
        return Path(sys.executable).resolve().parent
    return Path(__file__).resolve().parent

def convertir_png_a_jpg_960(png_path: Path, carpeta_salida: Path) -> None:
    with Image.open(png_path) as im:
        w, h = im.size
        if w <= 0:
            return

        nuevo_h = round(h * (ANCHO_OBJETIVO / w))

        im_rgba = im.convert("RGBA").resize((ANCHO_OBJETIVO, nuevo_h), Image.LANCZOS)

        fondo = Image.new("RGBA", im_rgba.size, (255, 255, 255, 255))
        compuesto = Image.alpha_composite(fondo, im_rgba).convert("RGB")

        out_path = carpeta_salida / f"{png_path.stem}.jpg"
        compuesto.save(out_path, "JPEG", quality=CALIDAD_JPG, optimize=True)

def main():
    base = carpeta_del_ejecutable_o_script()
    pngs = list(base.glob("*.png")) + list(base.glob("*.PNG"))

    salida = base / "resultado"
    salida.mkdir(exist_ok=True)

    if not pngs:
        print("No se encontraron PNG en:", base)
        return

    for p in pngs:
        try:
            convertir_png_a_jpg_960(p, salida)
            print("OK:", p.name)
        except Exception as e:
            print("Error con:", p.name, "|", e)

    print("Listo. Salida en:", salida)

if __name__ == "__main__":
    main()

Notas sobre calidad JPG

CALIDAD_JPG = 90 controla la compresion del JPEG. Un valor mas alto (por ejemplo 95) conserva mas detalle pero genera archivos mas pesados. Un valor mas bajo reduce el peso pero puede degradar texto fino o bordes.

Problemas reales y soluciones

1) Conflicto en Anaconda: pathlib incompatible con PyInstaller

Al compilar en Anaconda puede aparecer un conflicto con el paquete pathlib (backport obsoleto). La solucion fue eliminarlo, porque Python ya incluye pathlib en la libreria estandar.

conda remove pathlib

Alternativa si fuera necesario:

pip uninstall pathlib

2) Falta de espacio: No space left on device

PyInstaller necesita espacio temporal. Si el disco esta lleno la compilacion falla. Solucion: liberar espacio y borrar artefactos previos del proyecto.

Los mejores detectores de texto con IA probados en 2025Los mejores detectores de texto con IA probados en 2025
WhatsApp para ciegos: fácil en computadoras y Atajos de Teclado OcultosWhatsApp para ciegos: fácil en computadoras y Atajos de Teclado Ocultos
Sistema Binario: Ejemplos, Qué es,Cómo convertir, Ventajas y AplicacionesSistema Binario: Ejemplos, Qué es,Cómo convertir, Ventajas y Aplicaciones
rmdir /s /q build
rmdir /s /q dist
del /q script_png_to_jpg.spec

3) Bloqueo de Windows Defender: WinError 225

Windows Defender puede bloquear la creacion del .EXE por falso positivo. Se soluciono desactivando temporalmente la proteccion en tiempo real solo durante la compilacion, o agregando una exclusion para la carpeta del proyecto. Luego se recompila con:

python -m PyInstaller --clean --onefile --noconsole script_png_to_jpg.py

4) Archivo no encontrado por nombre mal escrito

Si aparece not found, casi siempre es por un nombre mal tipeado o por ejecutar el comando en otra carpeta. Verifica con:

dir