12

プログラムにモジュール(コンパイル済みの.pyc)をインポートしようとすると、問題が発生します。Python 2.6.6(r266:84297)でコンパイルされたことを知っています。同じバージョンをインストールしましたが、インポートしようとしたときに「不正なマジックナンバー」というエラーが発生しました:(

誰かが私が間違ったことを知っていますか?または、.pycモジュールのマジックナンバーを変更することは可能ですか?

4

3 に答える 3

7

Matthewによってリンクされた回答が説明しているように、問題はほぼ確実に、モジュールのコンパイルとロードに使用されているPythonのバージョンが異なることが原因です。あなたはこのように魔法の数を決定することができます:

with open('pyuca.pyc', 'rb') as f:
    print struct.unpack('<H', f.read(2))

Pythonのバージョンは、印刷することで判別できますsys.version(インタラクティブな起動時にもエコーされます)。Python 2.6.6を使用している場合、マジックナンバーは62161である必要があります。それが異なる場合、モジュールをインポートできるようにするには、別のPythonに切り替える必要があります。

まったく同じことがファイルにも当てはまり.pyoます。

于 2012-09-02T14:49:13.520 に答える
3

私は実行することによってこれを解決しました

find . -name '*.pyc' -exec rm {} +

これにより、ディレクトリ内のすべてのpycファイルが削除されました。その後は大丈夫でした。

于 2018-03-20T21:28:37.913 に答える
0

実行中のpython2とpython3で、古い* .pycファイルを削除するのが面倒な場合は、次を追加して、バイトコードファイルのコードローダーサフィックスを調整することで、このpython3のバグにパッチを当てることができます。

import sys
if(sys.version_info.major>=3): # switch byte files end extension on 3
    import importlib.machinery
    altsuffix = ['.pyc3'] # or some other ending that doesn't create conflicts
    importlib.machinery.BYTECODE_SUFFIXES = altsuffix
于 2020-05-14T09:37:44.283 に答える