Tecnología · GUÍA PRÁCTICA
¿Python muestra “bad magic number” en un .pyc? Prueba el runtime y la fuente
No borres todos los cachés ni edites la cabecera: identifica el archivo cargado, el intérprete real y si existe fuente utilizable.

No borres todos los cachés ni edites la cabecera: identifica el archivo cargado, el intérprete real y si existe fuente utilizable.
La cabecera pyc empieza con magic bytes del intérprete. importlib.util.MAGIC_NUMBER expone el valor actual.
1. Captura archivo e intérprete
Guarda traceback, sys.executable, sys.version, cache_tag, directorio, variables de importación y ruta fallida. El python del shell puede no ser el usado por servicio, IDE o tarea.
Localiza el archivo exacto con traceback o descubrimiento y revisa sys.path, entorno virtual, montajes y copias. El error prueba incompatibilidad de ese bytecode, no de todos los pyc.
2. Compara la cabecera sin ejecutar
Abre el archivo como datos, lee cuatro bytes y compáralos con MAGIC_NUMBER del intérprete que falla. No ejecutes bytecode no confiable para inspeccionarlo.
Una diferencia prueba otro runtime; una coincidencia no certifica seguridad: cabecera restante, código marshal o relación con fuente aún pueden fallar.
3. Separa fuente y pyc-only
Si existe .py autoritativo, conserva el pyc, elimina solo ese caché y deja que el runtime previsto lo regenere; verifica permisos.
Si es pyc-only, borrarlo elimina el programa. Obtén fuente o rebuild para el runtime objetivo; no cambies solo magic bytes.
4. Regenera o reconstruye
Compara paquetes con metadata y reinstala desde wheel o fuente confiable en entorno limpio. PyPA indica que wheels normalmente omiten pyc y el instalador los genera.
Reconstruye contenedores y bundles con el runtime de producción, excluye __pycache__ del host y no reutilices cachés tras upgrades.
5. Verifica imports y evita repetición
Reinicia el entry point real y confirma executable, import origin y versión; prueba imports en proceso nuevo.
Registra ruta, magic bytes, runtime, fuente, origen del rebuild y resultados; añade prueba clean-build contra cachés ajenos.
