Apple对Python框架做了什么?

时间:2011-05-27 11:23:34

标签: python macos

[TL;博士?见底部]

OS X上的Python一直有点令人厌恶,因为它在整个系统中分裂并分散开来。一些位于/usr,一些位于/Library/Python,一些位于/System/Library/Frameworks/Python.framework

现在,据我所知,该框架应该包含Python 发行版,即不会改变的点点滴滴。一个例子是标题,标准库,二进制图像等。

作为sort-of-popular Python C extension的开发人员,我认为自己在OS X生态系统中非常擅长以及如何在其上编译Python扩展。不是一个月前Apple decided to skip on QA,全面打破C扩建。

然而,它以一种新的方式被打破了,因为Apple似乎决定删除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原作?

总而言之,似乎Apple正在剥离重要的开发人员资源。我在OS X 10.6.7的其他MacBook上证实了这两个发现。

tl; dr Apple从Python框架中删除了许多重要的标头和源代码。这有没有发生过其他人?如果是这样,这是什么时候发生的?为什么会这样?最重要的是,我该如何让他们回来?

3 个答案:

答案 0 :(得分:6)

Python.h和其他头文件包含在Xcode中。在我的系统上,它位于/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安装程序安装的。

答案 1 :(得分:3)

实际上,看起来你根本不了解OS X生态系统。 /System/Library适用于Apple提供的OS X“发行版”组件;第三方不得将文件放在那里,而应使用/Library代替。这就是为什么内置Pythons(多个版本)在/System/Library/Frameworks/Python.framework中,但将site-packages目录放在/Library/Python中,以便可以在那里安装第三方模块。至于/usr/bin,它包含版本的python可执行文件的符号链接,以及根据某些参数自动选择版本的程序(参见man python)。它实际上非常合乎逻辑和整洁。

现在回答你的问题。 C头和其他开发人员资源不包含在OS X的默认安装中。这不是特定于Python的,并且是为了节省默认安装空间。要获取开发人员资源,您需要安装开发人员工具。无论如何,如果没有C编译器,你打算用C头做什么?

答案 2 :(得分:1)

我过去遇到过类似的问题。 Space_C0wb0y的建议对我有用,并且使用python_select我可以在python的“默认”版本之间切换。这也使我脱离了XCode。我使用MacPorts安装了2.6和2.7的版本,默认情况下将分发放在/opt/local/Library/Frameworks/Python.framework/Versions/2.7等位置。这是我设法实现一致安装的唯一方式,包括第三方模块。