悪いマジックナンバーエラーとは何ですか? 質問する

悪いマジックナンバーエラーとは何ですか? 質問する

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ファイルの最初の単語はすべて で621312.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

おすすめ記事