导入错误:坏魔数,自OSX猎豹以来
每次我在Eclipse中用PyDev运行任何Python文件时,都会出现这个错误:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/site.py", line 73, in <module>
__boot()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/site.py", line 2, in __boot
import sys, imp, os, os.path
ImportError: Bad magic number in /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.pyc
我使用的是Python 2.6。在终端中运行Python(2.7或2.6)时,这个问题不会出现。自从一切正常以来,我唯一做的重大更改就是把操作系统从Snow Leopard更新到了OSX Lion。
类似的讨论似乎提到要删除.pyc文件,因为原本使用这些.pyc文件的东西出现了不匹配(我对什么是魔数不是很清楚...)。不过,我对删除Frameworks目录下的os.pyc文件有点犹豫。因为那里只有一个os.pyo文件(我也不太确定这两者有什么区别),而不是os.py文件。
我已经安装了所有的OSX Lion更新、Eclipse更新和PyDev更新。
即使是像这样的代码也会出现这个问题:
if __name__ == '__main__':
pass
如果能帮我解决这个问题,我将非常感激!
3 个回答
在OS X Lion系统上,你应该有一个叫做os.py的文件。这很可能是你出错的根本原因。os.pyc文件是由一个和你现在运行的Python版本不同的版本生成的。通常情况下,我想Python解释器会从os.py
文件重新生成这个文件。但不知为什么,你的系统里没有这个文件。
我怀疑这只是更大问题中的一个小问题,通常我会建议你重新安装操作系统。
为了做个对比,我现在运行的是10.7.1版本,以下是我系统里的内容:
[2:23pm][wlynch@orange workout] ls /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.*
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.py
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.pyc
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.pyo
顺便提一下,*.pyo文件是Python字节码的优化版本。
是的,你需要从*.py文件重新生成所有的*.pyc和*.pyo文件。
怎么做取决于这些文件最开始是怎么生成的。有些Python的打包方式(还有它的附加组件),比如某些Linux版本,做得有点复杂,它们会把原始的*.py文件放在别的地方,并且有自己的构建系统来生成和放置*.pyc和/或*.pyo文件。在这种情况下,你必须使用那个构建系统,从原始的*.py文件重新生成它们。
顺便说一下,这里有几个链接,介绍关于*.pyo文件的内容。它们是编译后的Python模块的优化版本。
我把Python升级到了2.7.1版本,然后运行了一个叫“更新Shell配置”的命令文件,这个文件在Python的安装目录里。接着,我还根据新安装的设置调整了Netbeans里的Python配置,这样就成功了。