尝试导入.pyc模块时出现错误的幻数

时间:2012-09-02 06:11:55

标签: python

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

有人知道我做错了什么吗? 或者也许可以在.pyc模块中更改幻数?

3 个答案:

答案 0 :(得分:4)

正如answer linked by Matthew所解释的那样,您的问题几乎可以肯定是由于用于编译和加载模块的不同版本的Python。您可以像这样确定幻数:

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

您可以通过打印sys.version来确定您的Python版本(它也会在交互式启动时回显)。如果您使用的是Python 2.6.6,则幻数应为62161.如果不同,则需要切换到其他Python才能导入模块。

完全相同的情况适用于.pyo个文件。

答案 1 :(得分:0)

我通过运行

解决了这个问题
find . | grep .pyc$ | xargs rm

删除了我目录中的所有pyc文件。之后就可以了。

答案 2 :(得分: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