Le nombre magique provient des 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 son fichier pyc
lorsqu'il les crée.
L'interpréteur python s'assure ensuite que ce nombre est correct lors de son chargement.
Tout ce qui porte atteinte à ce nombre magique causera votre problème. Cela inclut l'édition du pyc
ou en essayant d'exécuter un pyc
à partir d'une version de python différente (généralement plus récente) que votre interpréteur.
S'ils sont votre pyc
il suffit de les supprimer et de laisser l'interpréteur recompiler le fichier py
fichiers. Sur les systèmes de type UNIX, cela peut être quelque chose d'aussi simple que :
rm *.pyc
ou :
find . -name '*.pyc' -delete
Si ce ne sont pas les vôtres, vous devrez soit vous procurer la py
pour une recompilation, ou un interpréteur qui peut exécuter le fichier pyc
avec cette valeur magique particulière.
Une chose qui pourrait être la cause de la nature intermittente. Le site pyc
qui cause le problème ne peut être importé que dans certaines conditions. Il est très peu probable qu'il soit importé parfois. Vous devriez vérifier la trace complète de la pile lorsque l'importation échoue ?
Soit dit en passant, le premier mot de tous mes 2.5.1(r251:54863)
pyc
Les fichiers sont 62131
, 2.6.1(r261:67517)
es 62161
. La liste de tous les nombres magiques se trouve à l'adresse suivante Python/import.c
Cette réponse est reproduite ici dans un souci d'exhaustivité (elle était à jour au moment où elle 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
0 votes
Pourriez-vous fournir le code dans lequel le problème se produit ?
0 votes
Et quelle version de python utilisez-vous ?
0 votes
Et la normalisation est-elle un de vos fichiers ou un fichier tiers ?
0 votes
Ce sont mes fichiers et j'utilise python 2.5.2.
3 votes
Hrm, ok, je pense que j'ai dû importer un ancien fichier .pyc qui a été oublié il y a longtemps lorsque j'ai déplacé le fichier .py, et donc j'ai pu importer la nouvelle version mais pas l'ancienne.
0 votes
Alors, Noah, est-ce que la suppression du fichier pyc a réglé votre problème ?
0 votes
Et, quels étaient les deux premiers octets de votre pyc problématique (si vous l'avez encore quelque part) ?
1 votes
J'ai supprimé l'ancien fichier .pyc, donc je ne l'ai pas sous la main, mais mon problème était avec les chemins d'importation -- je pense que python aurait utilisé le fichier .py pour recréer le fichier .pyc si je ne l'avais pas déplacé (est-ce exact ?)
0 votes
Cette erreur m'est arrivée en utilisant des fichiers pyc compilés en python 2.7 sur une machine Centos 6.5 (elle est livrée avec python 2.6).
0 votes
Mon
PYTHONPATH
a pointé vers du code destiné à une version différente de python.export PYTHONPATH=