在我的程序中嘗試導入某個模塊(編譯後的.pyc)時出現了一些問題。我知道它編譯爲Python 2.6.6(r266:84297),我已經安裝了相同的版本,但在嘗試導入時出現錯誤「不良幻數」:(嘗試導入.pyc模塊時出現錯誤的幻數
有沒有人知道我做錯了什麼? 或許有可能改變幻數.pyc文件模塊?
在我的程序中嘗試導入某個模塊(編譯後的.pyc)時出現了一些問題。我知道它編譯爲Python 2.6.6(r266:84297),我已經安裝了相同的版本,但在嘗試導入時出現錯誤「不良幻數」:(嘗試導入.pyc模塊時出現錯誤的幻數
有沒有人知道我做錯了什麼? 或許有可能改變幻數.pyc文件模塊?
隨着answer linked by Matthew解釋說,你的問題是幾乎可以肯定,由於被用於編譯和加載模塊的不同版本的Python,你可以決定一個神奇的數字像這樣:
with open('pyuca.pyc', 'rb') as f:
print struct.unpack('<H', f.read(2))
你可以通過printin來確定你的Python版本g sys.version
(它也在交互式啓動時迴應)。如果您使用Python 2.6.6,幻數應該是62161.如果不同,您需要切換到另一個Python才能導入模塊。
完全相同適用於.pyo
文件。
有趣的事情。我需要導入的.pyc文件具有魔力:C0 00 00 00.它使用pyInstaller打包的.Exe運行。 Python版本2.6.6(DLL)。也許PyInstaller改變.pyc的魔術和可能的結構? – user1641423
對不起。 magic = 63 00 00 00 – user1641423
是那些十六進制字節,如果是的話,你是如何獲得它們的?這看起來不像一個有效的Python幻數,這可能是Python拒絕導入文件的原因。 – user4815162342
退房http://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error?rq=1 –
我沒有.py文件重新編譯它。我只有.pyc但不知道爲什麼python不能導入它。版本相同 – user1641423
我發現這個文件是.pyo(第一次發現它沒有擴展名)。是否有任何不同的.pyo和.pyc文件?或者他們是一樣的? – user1641423