ImportError:自OSX Lion以来的错误幻数

时间:2011-08-21 18:49:11

标签: python osx-lion magic-numbers pyc

每次在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。当我从终端(2.7或2.6)运行python时不会发生此问题。自从上次工作以来我改变的唯一重要的事情是来自Snow Leopard的OSX Lion的更新。

类似的讨论似乎暗示某种类型的.pyc文件的删除,因为最初使用.pyc文件之间的某种不匹配(我不完全确定一个神奇的数字是什么...... )。但我对从Frameworks目录中删除os.pyc的想法有点谨慎。当唯一的其他文件是os.pyo文件(不确定它有什么区别),而不是os.py。

我已经安装了所有OSX Lion更新,Eclipse更新和PyDev更新。

即使使用以下代码也会出现此问题:

if __name__ == '__main__':
    pass

任何帮助解决这个问题都将不胜感激!

3 个答案:

答案 0 :(得分:2)

将Python升级到2.7.1,运行位于Python目录中的“Update Shell Profile”命令文件,并根据新安装更改Netbeans中的Python设置。

答案 1 :(得分:1)

是的,您需要从* .py文件中重新生成所有* .pyc * .pyo文件。

如何执行此操作取决于它们首先生成的方式。 python的一些包装(以及它的附加组件),例如在某些Linux发行版中,对于它自己的好处有点过于聪明,并将原始的* .py文件保存在其他地方并拥有自己的构建系统来生成和放置* .pyc和/或* .pyo文件。在这种情况下,您必须使用 构建系统从原始* .py文件中重新生成它们。

仅供参考,这里是* .pyo文件的couple links。它们是已编译的python模块的优化版本。

答案 2 :(得分:0)

在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字节码的优化版本。