Por qué compilar Python
Si estás construyendo una app de escritorio en Python y quieres que una persona normal la ejecute, "pip install" no es una opción. No tienen Python instalado, no quieren instalarlo, y no deberían tener que hacerlo. Necesitas un .exe real en el que puedan hacer doble clic. Eso significa compilar — convertir tu código Python interpretado y sus dependencias en algo que se ejecuta sin una instalación de Python en la máquina de destino.
Por qué PyInstaller no era suficientemente bueno
PyInstaller fue mi primer intento, y funciona — técnicamente. El problema es lo que realmente hace: empaqueta un intérprete de Python y todas tus dependencias, luego las extrae a una carpeta temporal cada vez que la app arranca (en modo --onefile) o las distribuye como una carpeta llena de archivos sueltos (en modo --onedir). De cualquier forma, sigues ejecutando bytecode interpretado a través de un runtime de Python incrustado al inicio, no código máquina compilado. El arranque se sentía lento, el paso de extracción a temp añadía un retraso visible en el primer lanzamiento, y el software antivirus trata "se autoextrae a %TEMP% y empieza a ejecutarse" como una heurística de manual para malware — causando exactamente el problema de falso positivo que intentaba evitar.
El enfoque correcto: Nuitka --standalone
Nuitka es un compilador real de Python a C. No empaqueta un intérprete — traduce tu código Python a C, lo compila con un compilador C real, y lo enlaza en un ejecutable nativo real. El resultado se ejecuta como código máquina compilado, no bytecode interpretado dentro de un runtime incrustado. El arranque es casi instantáneo, y — de forma crítica — nunca se autoextrae a una carpeta temporal en tiempo de ejecución, lo que elimina el mayor detonante para las heurísticas de antivirus. La bandera que más importa es --standalone: produce una carpeta autocontenida con tu .exe y sus dependencias nativas justo al lado, lista para distribuir tal cual o envolver en un instalador.
Cómo hacerlo de verdad
Los 3 errores que me costaron horas
⚠️ Olvidar --enable-plugin=tk-inter
Si tu GUI usa Tkinter o CustomTkinter y omites esta bandera, la app compilada no falla ruidosamente — simplemente no carga el toolkit de GUI y puede colapsar en silencio o mostrar una ventana en blanco. Nuitka no incluye soporte de frameworks GUI por defecto; tienes que activarlo por framework.
⚠️ Usar --onefile en vez de --standalone
--onefile es tentador porque produce un solo .exe en vez de una carpeta. No lo uses para nada que planees distribuir públicamente. Las builds onefile igual se autoextraen a una carpeta temporal en tiempo de ejecución — el mismo comportamiento que hacía que PyInstaller disparara falsos positivos — y lo he visto marcado por Windows Defender como Wacatac o Sabsik puramente por ese patrón de extracción, con código completamente limpio. --standalone evita esto por completo.
⚠️ Resolver rutas de assets con __file__ en vez de sys.executable
En un script Python normal, __file__ apunta a la ubicación de tu archivo fuente. En una build standalone compilada, esa suposición se rompe. Usa Path(sys.executable).parent para encontrar dónde vive realmente tu .exe en la máquina del usuario, y carga archivos de configuración, iconos y assets empaquetados relativos a eso — no relativos a donde estaba el fuente durante el desarrollo.
Qué obtienes realmente
Tanto ReelNox Studio como BackDrop_ se distribuyen como builds Nuitka --standalone, firmadas con un certificado DigiCert EV. El arranque es instantáneo, Windows Defender no marca ninguno de los dos instaladores, y ninguna de las dos apps ha necesitado nunca un runtime de Python empaquetado en el que el usuario tenga que pensar. La combinación que importa es: --standalone (no --onefile) más una firma de código adecuada — juntas resuelven tanto el problema de rendimiento como el problema de confianza que vienen con distribuir una app Python como ejecutable nativo de Windows.
About
Patrick Chen — desarrollador independiente detrás de Sublimearts.io. Escribo sobre los problemas de build reales que encontré al distribuir ReelNox Studio, BackDrop_ y TimePeek a usuarios reales de Windows — no tutoriales genéricos.