Как Xcode выбирает, какой Python запускать? - PullRequest
0 голосов
/ 14 декабря 2010

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

1 Ответ

0 голосов
/ 08 января 2011

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

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
..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...