Python の「Bad magic number」ImportError とは何ですか? また、これを修正するにはどうすればよいですか?
オンラインで見つけた唯一の情報によると、これは .py -> .pyc ファイルをコンパイルし、それを間違ったバージョンの Python で使用しようとしたことが原因であるようです。ただし、私の場合、ファイルはときどき正常にインポートされるものの、ときどきはそうではないようです。その理由はよくわかりません。
Python がトレースバックで提供する情報は特に役立つわけではありません (それが私がここで質問した理由です...) が、役立つかもしれないのでここに示します。
Traceback (most recent call last):
File "run.py", line 7, in <module>
from Normalization import Normalizer
ベストアンサー1
マジックナンバーは、ファイルの最初の数バイトにファイルの種類を示すマーカーが格納されている UNIX タイプのシステムに由来します。
Python はファイルを作成するときに、ファイルに同様のマーカーを配置しますpyc
。
次に、Python インタープリターは、ロード時にこの数値が正しいことを確認します。
このマジックナンバーにダメージを与えるものは何でも、問題の原因になります。これには、pyc
ファイルの編集や、インタープリターとは異なるバージョンの Python (通常はそれ以降) からの実行の試みが含まれpyc
ます。
それがあなたの pyc
ファイルである場合(またはpy
それらのファイルを持っている場合)、それらを削除してインタープリタにpy
ファイルを再コンパイルさせます。UNIX タイプのシステムでは、次のように簡単に実行できます。
rm *.pyc
または:
find . -name '*.pyc' -delete
これらが自分のものではなく、元のpy
ファイルも提供されていない場合は、再コンパイル用にファイルを入手するpy
か、その特定のマジック値を使用してファイルを実行できるインタープリターを使用する必要がありますpyc
。
断続的な性質を引き起こしている可能性がある 1 つの要因。pyc
問題の原因となっているものは、特定の条件下でのみインポートされる可能性があります。時々インポートされる可能性はほとんどありません。インポートが失敗した場合は、実際のフル スタック トレースをチェックする必要があります。
余談ですが、私の2.5.1(r251:54863)
pyc
ファイルの最初の単語はすべて で62131
、2.6.1(r261:67517)
です62161
。すべてのマジックナンバーのリストは にありますPython/import.c
。完全性のためにここに再現します (回答が投稿された時点での最新であり、それ以降変更されています)。
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