尝试在程序中导入某个模块(编译.pyc)时遇到一些问题。我知道它是在Python 2.6.6(r266:84297)中编译的,我已经安装了相同的版本,但在尝试导入它时出现错误“错误的幻数”:(
有人知道我做错了什么吗? 或者也许可以在.pyc模块中更改幻数?
答案 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