El número mágico viene de Sistemas de tipo UNIX donde los primeros bytes de un archivo contenían un marcador que indicaba el tipo de archivo.
Python pone un marcador similar en sus archivos pyc
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 archivo pyc
o tratar de ejecutar un pyc
desde una versión diferente de python (generalmente más tarde) que su intérprete.
Si son sus pyc
archivos, simplemente eliminarlos y dejar que el intérprete de volver a compilar los archivos py
. En los sistemas de tipo UNIX, que podría ser algo tan simple como:
rm *.pyc
o:
find . -name '*.pyc' -delete
Si ellos no son los suyos, que tendrá que o bien obtener los archivos py
para re-compilación, o un intérprete que puede ejecutar los archivos pyc
con ese valor mágico particular.
Una cosa que podría estar causando la naturaleza intermitente. El pyc
que está causando el problema solo se puede importar bajo ciertas condiciones. Es muy poco probable que se importe a veces. ¿Debería verificar el seguimiento de la pila completa cuando falla la importación?
Como acotación al margen, la primera palabra de todos mis archivos es pyc
2.5.1(r251:54863)
62131
, 2.6.1(r261:67517)
es 62161
. La lista de todos los números mágicos se puede encontrar en Python/import.c
, reproducido aquí para completar (actual como en el momento la respuesta fue publicada, 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
¿Podría proporcionar el código en el que se está produciendo el problema? –
¿Y qué versión de python estás usando? – paxdiablo
¿Y la normalización es uno de sus archivos o uno de terceros? – paxdiablo