0

使用 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。

4

1 回答 1

0

很抱歉回答我自己的问题,但我很困惑。这部分是错误的

版本 2.5 框架中的 Python 启动 2.6.1

由于我没有意识到这里发生了什么(来自 Version/2.6 目录)

> ./Python
-bash: ./Python: cannot execute binary file
> Python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 

是我们正在搜索我的 $PATH 并启动 /opt/local/bin/python。为混乱道歉。

总而言之,设置 SDK 应该可以运行所需的 Python,正如我们通过窥探加载器所看到的那样:

> export DYLD_PRINT_LIBRARIES=1
> ~/Desktop/X/build/Debug/X.app/Contents/MacOS/X
dyld: loaded: /Users/telliott_admin/Desktop/X/build/Debug/X.app/Contents/MacOS/X
dyld: loaded: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
dyld: loaded: /System/Library/Frameworks/Python.framework/Versions/2.5/Python
..
于 2011-01-08T19:03:39.280 回答