Используя шаблоны Python для Xcode, у меня есть простой проект, работающий на одной машине и терпящий неудачу на двух других по разным причинам. Ошибка, которую я решил, заключается в том, что, хотя main.m имеет:
Py_SetProgramName("/usr/bin/python");
Фактический работающий Python, как видно из main.py, выглядит следующим образом:
import sys
print sys.version
это отличается. И проблема заключалась в том, что на этом другом Python не был установлен objc. Итак, вопрос: кроме очистки моей машины, как я могу направить Xcode на использование системного Python?
Редактировать:
Это проблема, которая кажется тривиальной, но это не так. Это кажется так, потому что, когда я указываю 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) или отследив загрузчик (выполнив export DYLD_PRINT_LIBRARIES=1), я вижу, что приложение PyObjC фактически запускает Python 2.5.4.
Строка выше с Py_SetProgramName.. не имеет значения --- ее можно закомментировать и все работает нормально.
Итак, похоже, что Python.framework контролирует, какой Python запускается, он делает это не так, как я ожидал, и он может контролироваться с помощью процедуры инициализации, которая непрозрачна, поскольку она контролируется Apple. Кажется, лучший способ «контролировать» ситуацию — изменить Base SDK.