Le nombre magique provient de systèmes de type UNIX où les premiers octets d'un fichier contenaient un marqueur indiquant le type de fichier.
Python place un marqueur similaire dans ses pyc
fichiers lorsqu'il les crée.
L'interpréteur python s'assure ensuite que ce nombre est correct lors du chargement.
Tout ce qui endommage ce nombre magique causera votre problème. Cela inclut la modification du pyc
fichier ou la tentative d'exécution d'un à pyc
partir d'une version différente de python (généralement plus tard) que votre interprète.
Si ce sont vos pyc
fichiers, supprimez-les et laissez l'interprète recompiler les py
fichiers. Sur les systèmes de type UNIX, cela pourrait être quelque chose d'aussi simple que:
rm *.pyc
ou:
find . -name '*.pyc' -delete
S'ils ne vous appartiennent pas, vous devrez soit récupérer les py
fichiers à recompiler, soit utiliser un interpréteur capable d'exécuter les pyc
fichiers avec cette valeur magique particulière.
Une chose qui pourrait être à l'origine de la nature intermittente. Ce pyc
qui cause le problème ne peut être importé que sous certaines conditions. Il est très peu probable qu'il soit importé parfois. Vous devez vérifier la trace réelle de la pile complète lorsque l'importation échoue?
En passant, le premier mot de tous mes 2.5.1(r251:54863)
pyc
fichiers est 62131
, 2.6.1(r261:67517)
est 62161
. La liste de tous les nombres magiques se trouve dans Python/import.c
, reproduite ici pour être complète (à jour au moment où la réponse a été publiée, elle peut avoir changé depuis):
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