Python.framework在OS X 10.9 SDK中缺失。为什么?还有:解决方法?

15

系统:

  • OS X Mavericks 10.9 13A603
  • Xcode 版本 5.0.1 (5A2053)

问题:

Python.framework 在 Xcode 的 10.9 SDK 中似乎已经丢失。

Python.framework 存在于 Xcode 10.8 SDK 中:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Python.framework

然而,在我的 Xcode 10.9 SDK 中缺少它:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/

这很奇怪,因为在这里,Python.framework仍然可供10.9系统的用户使用:

/System/Library/Frameworks/Python.framework

Python.framework 在 10.9 SDK 中被有意地移除了吗?这是 Apple 给我们停止使用这个框架的一个不太明显的提示吗?还是我只是困惑了?

注:

这很重要,因为我有一个针对 Python.framework 进行链接的 OS X 应用程序。似乎我无法使用 Base SDK 构建设置为 10.9 的应用程序,因为缺少 Python.framework 并且我必须链接到它。

我对为什么会缺少这个框架(或者我是否错了而它实际上并没有缺失),以及解决方法的建议都感兴趣。


由于这是Homebrew、MacPorts等社区刚开始解决的全新问题,因此您可能想要在它们的跟踪器上搜索匹配的错误,以及查看此处右侧的所有相关链接,因为在其他数十个问题得到解答之前,有人会发布对您问题的答案的概率似乎相当小。 - abarnert
顺便说一下,它并不是全新的,只是直到最近所有关于它的讨论都在NDA论坛上...但我个人几个月前没有找到答案,就把它搁置了...现在我想现在是时候了... - abarnert
你不能直接链接到/System/Library/Frameworks/Python.framework吗? - Brad Allred
@abarnert MacPorts 至少不应该有此问题,因为它使用自己版本的库、Python 等,正因为这种情况。 - mmmmmm
4个回答

18

有一个官方的苹果支持页面涉及此主题:

使用Xcode 5.0嵌入Python的更改

基本上,他们说的是,使用带SDK的 Python.framework 集成 Python 的方法已被弃用,取而代之应该使用标准的 *nix 方法,即使用 python.h 标头。

也就是说(以下说明摘自链接文章,请点击链接查看更多细节):

  1. #include <Python/Python.h> 替换为 #include <Python.h>
  2. 在标头搜索路径中包含 Python 标头位置;
  3. 从项目构建中删除 Python.framework
  4. 将 python .dylib 文件添加到 Xcode 中;

至于原理,他们没有详细说明,只是提到:

因为 Python 是一个框架,它也驻留在 SDK 中,尽管 Python(或任何脚本语言)在两个地方存在困难。由于长期和最近的问题,决定从 SDK 中移除 Python。


2
请注意,标准的*nix操作方式是使用“-I $(python-config --includes)”等命令,但在Xcode中进行此操作比自己查找位置并静态添加更困难。 - abarnert

1

我也遇到了这个问题(并解决了):

/bin/sh ../libtool --silent --tag=CC  --mode=link gcc  -I../include -I../ -g -O2 -Wall \
    -isysroot <blah>/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk \
    -Wl,-F/System/Library/Frameworks \
    -framework Python \
    -u _PyMac_Error \
    -o libdnet.la -\
     rpath /usr/local/lib *.lo

我最初注意到的是,我使用的gnu libtool在-F的前面附加了-Wl标志。因此,我添加了

     -F/System/Library/Frameworks
     -L/System/Library/Frameworks (just to be safe)

然后,另一件相当明显的事情是'-framework Python'没有像通常一样的 .framework 后缀。因此,我也加上了这个后缀。

      -framework Python.framework

我仍然无法让事情正常工作。然后我想出了是什么问题:

长话短说,我不知道为什么它有效或者他们为什么改变了任何东西,我特别生气的是Python.framework不再在SDK中(尽管一直以来链接它都很奇怪,但我需要一段时间重新适应...)

-framework只需要更改为-f

额外的问题是,有一个Python系统范围的设置对象,以及需要修复的'python-config' CLI程序,以便它们不再传播这个错误的设置。


0

-1

如果您安装了Xcode命令行工具,该框架将变得可用:

xcode-select --install

嗯,我尝试了这个,但是在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks路径下仍然找不到Python.framework。 - Todd Ditchendorf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接