El número mágico proviene de sistemas de tipo UNIX donde los primeros bytes de un archivo contenían un marcador que indica el tipo de archivo.
Python coloca un marcador similar en sus pyc
archivos cuando los crea.
Luego, el intérprete de Python se asegura de que este número sea correcto al cargarlo.
Cualquier cosa que dañe este número mágico causará su problema. Esto incluye editar el pyc
archivo o intentar ejecutar un archivo pyc
desde una versión diferente de python (generalmente más tarde) que su intérprete.
Si son sus pyc
archivos, simplemente elimínelos y deje que el intérprete vuelva a compilar los py
archivos. En los sistemas de tipo UNIX, eso podría ser algo tan simple como:
rm *.pyc
o:
find . -name '*.pyc' -delete
Si no son suyos, tendrá que obtener los py
archivos para volver a compilarlos o un intérprete que pueda ejecutar los pyc
archivos con ese valor mágico en particular.
Una cosa que podría estar causando la naturaleza intermitente. Lo pyc
que está causando el problema solo puede importarse bajo ciertas condiciones. Es muy poco probable que importe algunas veces. ¿Debe verificar el seguimiento real de la pila completa cuando falla la importación?
Como comentario aparte, la primera palabra de todos mis 2.5.1(r251:54863)
pyc
archivos es 62131
, 2.6.1(r261:67517)
es 62161
. La lista de todos los números mágicos se puede encontrar en Python/import.c
, reproducida aquí para completar (actual como en el momento en que se publicó la respuesta, puede haber cambiado desde entonces):
1.5: 20121
1.5.1: 20121
1.5.2: 20121
1.6: 50428
2.0: 50823
2.0.1: 50823
2.1: 60202
2.1.1: 60202
2.1.2: 60202
2.2: 60717
2.3a0: 62011
2.3a0: 62021
2.3a0: 62011
2.4a0: 62041
2.4a3: 62051
2.4b1: 62061
2.5a0: 62071
2.5a0: 62081
2.5a0: 62091
2.5a0: 62092
2.5b3: 62101
2.5b3: 62111
2.5c1: 62121
2.5c2: 62131
2.6a0: 62151
2.6a1: 62161
2.7a0: 62171