苹果对Python框架做了什么?
[简而言之?见底部]
在OS X上,Python一直有点乱七八糟,它的文件分散在系统的各个地方。有些在/usr
,有些在/Library/Python
,还有一些在/System/Library/Frameworks/Python.framework
。
根据我的理解,这个框架应该包含Python的发行版,也就是那些不会改变的部分,比如头文件、标准库、二进制文件等等。
作为一个开发者,我在OS X生态系统和如何在上面编译Python扩展方面自认为还不错。就在一个月前,苹果决定不再进行质量检查,这导致了C扩展的构建出现了问题。
不过,这次的问题又有些不同,因为苹果似乎决定移除Python发行版中大部分重要的内容。看看include/
目录:
$ ls -l /System/Library/Frameworks/Python.framework/Versions/Current/include/python2.6
total 16
-rw-r--r-- 1 root wheel 30K Jun 25 2010 pyconfig.h
缺少什么吗?也许是Python.h
这个头文件?更糟糕的是,我在使用zc.buildout
时遇到了麻烦,因为它找不到site.py
... 来看看:
$ python -c 'print __import__("site").__file__'
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site.pyc
$ ls -l /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site.py*
-rw-r--r-- 1 root wheel 20K May 17 15:40 /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site.pyc
缺少什么吗?也许是原版的site.py
?
总的来说,苹果似乎在剥离一些重要的开发资源。我在其他运行OS X 10.6.7的MacBook上确认了这两个问题。
简而言之 苹果移除了很多重要的头文件和源代码,导致Python框架出现问题。这种情况发生在其他人身上吗?如果有,是什么时候发生的?为什么会这样?最重要的是,我该如何找回这些文件?
3 个回答
我以前也遇到过类似的问题。Space_C0wb0y 的建议对我很有效,使用 python_select
我可以在不同的“默认”版本的 Python 之间切换。这也让我不再依赖 XCode。我通过 MacPorts 安装了 2.6 和 2.7 版本,默认情况下,这些版本会放在像 /opt/local/Library/Frameworks/Python.framework/Versions/2.7
这样的地方。这是我唯一能保证安装一致性的方法,包括第三方模块。
其实,看起来你对OS X的生态系统并不是很了解。/System/Library
是用来存放苹果自带的操作系统组件的;第三方软件不能往这里放文件,而应该使用/Library
。这就是为什么内置的Python(有多个版本)放在/System/Library/Frameworks/Python.framework
里,但它的site-packages
目录放在/Library/Python
,这样第三方模块才能安装到那里。至于/usr/bin
,它里面有指向不同版本Python可执行文件的快捷方式,还有一些程序会根据参数自动选择版本(可以查看man python
)。其实这一切都是很有逻辑和条理的。
现在来回答你的问题。C语言的头文件和其他开发者资源在OS X的默认安装中是没有的。这并不是Python特有的,而是为了节省默认安装的空间。要获取开发者资源,你需要安装开发者工具。说实话,没有C编译器,你拿C语言的头文件也没什么用吧?
在Xcode中包含了Python.h和其他头文件。在我的系统上,它们的位置有两个,一个是在 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h
,另一个是在 /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h
。后者似乎是通过Xcode安装程序安装的。