我在尝试导入一些模块(编译的 .pyc 文件)时遇到了一些问题。我知道它是使用 Python 2.6.6(r266:84297)编译的,我已经安装了相同版本,但在尝试导入时出现了 "bad magic number" 错误 :(
有人知道我做错了什么吗? 或者 .pyc 模块中的魔数是否可以更改?
我在尝试导入一些模块(编译的 .pyc 文件)时遇到了一些问题。我知道它是使用 Python 2.6.6(r266:84297)编译的,我已经安装了相同版本,但在尝试导入时出现了 "bad magic number" 错误 :(
有人知道我做错了什么吗? 或者 .pyc 模块中的魔数是否可以更改?
正如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
文件,同样适用。
find . -name '*.pyc' -exec rm {} +
我删除了目录中的所有pyc文件,之后一切都正常了。
find . -name '*.pyc' -delete
- medecauimport 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
.pyc
和.pyo
非常相似。它们都是Python代码的版本,已经进行了“字节编译”,以便在导入其他Python程序的模块时加载更快。.pyo
基本上是.pyc
的稍微优化版本。(有关更多详细信息,请参见文档。) - Matthew Adams