2012-09-02 20 views
6

私のプログラムでいくつかのモジュール(.pycをコンパイルしたもの)をインポートしようとするといくつか問題があります。私はそれがPython 2.6.6(r266:84297)でコンパイルされていることを知っていますが、同じバージョンをインストールしましたが、インポートしようとしている間に「悪いマジックナンバー」というエラーがありました:(.pycモジュールをインポートしようとしているときにマジックナンバーが正しくありません

誰かが私が間違った? または多分それは.pycファイルモジュールにマジックナンバーを変更することが可能です?

+1

http://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error?rq=1 –

+0

私はそれを再コンパイルするための.pyファイルがありません。私は.pycしか持っていませんが、なぜPythonがそれをインポートできないのか分かりません。バージョンは同じです – user1641423

+0

私はこのファイルが.pyoであることを発見しました(初めて拡張子なしで見つけました)。 .pyoファイルと.pycファイルは違いますか?それとも同じですか? – user1641423

答えて

4

answer linked by Matthewが説明するように、あなたの問題が原因のモジュールをコンパイルしてロードするために使用されているのPythonの異なるバージョンにはほぼ確実である。あなたはマジックナンバーを決定することができます

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

あなたのPythonのバージョンは、printin g sys.version(対話型起動時にもエコーされます)。 Python 2.6.6を使用している場合、マジックナンバーは62161でなければなりません。異なる場合は、モジュールをインポートするために別のPythonに切り替える必要があります。

正確には.pyoファイルに適用されます。

+0

面白いことです。私がインポートする必要がある.pycファイルには魔法があります:C0 00 00 00。pyInstallerで圧縮された.Exeから実行します。 Pythonバージョン2.6.6(DLL)。たぶんPyInstallerは魔法と.pycの可能な構造を変えるでしょうか? – user1641423

+0

申し訳ありません。 magic = 63 00 00 00 – user1641423

+0

これらの16進数のバイトで、もしそうなら、どのように入手しましたか?これは有効なPythonのマジックナンバーのようには見えません。そのため、Pythonがファイルのインポートを拒否しているのかもしれません。 – user4815162342

関連する問題