使用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)或通过窥探加载器(通过导出DYLD_PRINT_LIBRARIES = 1),我可以看到PyObjC应用实际上启动了Python 2.5.4。
上面的行与Py_SetProgramName ..无关 - 它可以被注释掉,一切正常。
所以看起来它是Python.framework控制启动哪个Python,它不会按照我预期的方式执行此操作,并且它可能通过不透明的初始化例程来控制,因为它由Apple控制。似乎“控制”情况的最佳方式是更改Base SDK。
答案 0 :(得分: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
..