Watch at EaseHistorias. Respuestas. Perspectiva.

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.

Diagrama para identificar pyc, runtime y magic bytes
Ilustración original: prueba primero el límite incompatible. Watch at Ease

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.

Decisión para fuente, pyc-only y paquete
Ilustración original: reconstruye en vez de editar cabeceras. Watch at Ease