苹果对Python框架做了什么?

10 投票
3 回答
3921 浏览
提问于 2025-04-16 18:27

[简而言之?见底部]

在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 个回答

1

我以前也遇到过类似的问题。Space_C0wb0y 的建议对我很有效,使用 python_select 我可以在不同的“默认”版本的 Python 之间切换。这也让我不再依赖 XCode。我通过 MacPorts 安装了 2.6 和 2.7 版本,默认情况下,这些版本会放在像 /opt/local/Library/Frameworks/Python.framework/Versions/2.7 这样的地方。这是我唯一能保证安装一致性的方法,包括第三方模块。

3

其实,看起来你对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语言的头文件也没什么用吧?

6

在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安装程序安装的。

撰写回答