Как Xcode выбирает, какой Python запускать?

Используя шаблоны 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.


person telliott99    schedule 14.12.2010    source источник


Ответы (1)


Извините, что отвечаю на свой вопрос, но я просто запутался. Эта часть является ошибкой

Python в фреймворке версии 2.5 запускает 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
..
person telliott99    schedule 08.01.2011