12

尝试在我的程序中导入某些模块(编译的 .pyc)时遇到一些问题。我知道它是在 Python 2.6.6 (r266:84297) 中编译的,我安装了相同的版本,但是在尝试导入它时出现错误“bad magic number”:(

有人知道我做错了什么吗?或者也许可以在 .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 回答