Используя шаблоны Python для XCode, у меня есть простой проект, работающий на одной машине и терпящий неудачу на двух других, по разным причинам. Ошибка, которую я решил, состоит в том, что, хотя main.m имеет:
Py_SetProgramName("/usr/bin/python");
Фактический запущенный Python, как видно из main.py с этим:
import sys
print sys.version
отличается. И проблема была в том, что на другом Python не был установлен objc. Таким образом, вопрос заключается в следующем: если не очистить мою машину, как я могу указать Xcode использовать систему Python?
Edit:
Это проблема, которая кажется тривиальной, но это не так. Это так, потому что, когда я указываю Mac OS X 10.5 в качестве базового SDK, Xcode связывается с этим Python.framework, как я могу видеть, дважды щелкнув значок в Linked Frameworks в проекте Xcode.
Каждая версия в Python.framework имеет пару ключ / значение в своем Info.plist: CFBundleExecutableName / Python. К счастью (для криминалистики), этот Python в платформе версии 2.5 запускает 2.6.1! Тем не менее, печатая sys.version (из main.py) или отслеживая загрузчик (выполняя экспорт DYLD_PRINT_LIBRARIES = 1), я вижу, что приложение PyObjC фактически запускает Python 2.5.4.
Строка выше с Py_SetProgramName .. не имеет значения --- ее можно закомментировать, и все работает нормально.
Итак, похоже, что Python.framework контролирует, какой Python запускается, он делает это не так, как я ожидал, и он может управляться непрозрачной подпрограммой инициализации, поскольку она контролируется Apple. Кажется, лучший способ «контролировать» ситуацию - это изменить Base SDK.