使用 Xcode 的 Python 模板,我有一个简单的项目在一台机器上运行,但由于不同的原因在另外两台机器上失败。我解决的失败是即使 main.m 有:
Py_SetProgramName("/usr/bin/python");
从 main.py 看到的实际运行的 Python:
import sys
print sys.version
是不同的。问题是这个其他 Python 没有安装 objc。那么问题来了:除了清理我的机器,我怎么能指示 Xcode 使用系统 Python 呢?
编辑:
这是一个看似微不足道的问题,但事实并非如此。之所以如此,是因为当我将 Mac OS X 10.5 指定为 Base SDK 时,Xcode 会链接到那个 Python.framework,正如我可以通过双击 Xcode 项目的 Linked Frameworks 中的图标看到的那样。
Python.framework 中的每个版本在其 Info.plist 中都有一个键/值对:CFBundleExecutableName/Python。幸运的是(为了取证)这个版本 2.5 框架中的 Python 发布了 2.6.1!然而,通过打印 sys.version(来自 main.py)或窥探加载程序(通过执行 export DYLD_PRINT_LIBRARIES=1),我可以看到 PyObjC 应用程序实际上启动了 Python 2.5.4。
上面带有 Py_SetProgramName.. 的行是无关紧要的——它可以被注释掉并且一切正常。
所以看起来是 Python.framework 控制启动哪个 Python,它没有按照我预期的方式执行此操作,并且它可能通过不透明的初始化例程进行控制,因为它由 Apple 控制。似乎“控制”情况的最佳方法是更改 Base SDK。