Запуск приложения PyObjC (встроенного в Xcode) на предыдущей версии Mac OS?
Я использую XCode для создания приложения PyObjC. Приложение работает нормально на компьютере сборки (10.8), но при запуске на компьютере с 10.6 происходит сбой, потому что не удается найти установку Python 2.7. Достаточно справедливо - предустановленный Python на 10.6 - это Python 2.5. Но мне все равно, какую версию Python использует мое приложение, я просто хочу, чтобы оно использовало последнюю найденную версию Python.
Как я могу либо:
А) Скажите моему приложению использовать последнюю версию Python, доступную в хост-системе, ИЛИ
Б) Вложить весь исходный код Python в мое приложение?
Я был очень расстроен этой проблемой, и любая помощь будет принята с благодарностью!
2 ответа
Хороший вопрос. Я боролся с этим из-за проблемы с встраиванием несколько лет назад и в итоге динамически связывался с конкретной версией, которая, как я знал, была доступна на каждой платформе.
Я изначально предполагал, что Python.framework
"s Current
было бы достаточно, но, похоже, Xcode разрешает его во время компоновки, что делает ссылку специфичной для конкретной версии. Для моих целей я был в состоянии связаться непосредственно с
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/Python
Который работает для OS X 10.7 и 10.8. Если вам нужно вернуться к 10.6, попробуйте установить ссылку на
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.5/Python
Очевидно, что если вы компилируете с использованием 10.6 SDK, вы захотите использовать это, но главное - убедиться, что вы ссылаетесь на версию библиотеки для конкретной версии, а не на саму версию фреймворка. У вас должна быть возможность вручную перейти к определенной версии с помощью кнопки + в бинарной ссылке с библиотеками, но если у вас возникли проблемы, вы можете открыть Python.framework из SDK непосредственно в Finder и перетащить библиотеку конкретной версии в группа " Связь двоичных файлов с библиотеками ".
Если вы найдете способ обойти это, тогда, пожалуйста, опубликуйте другой ответ здесь, но для меня было эффективным добавить ссылку для встраивания в мое приложение.
Используйте py2app для создания пакета приложения и сделайте это с помощью отдельной установки Python (то есть не используйте /System/Library/Framework/Python.framework). Используемая вами установка Python должна быть скомпилирована с MACOSX_DEPLOYMENT_TARGET, установленным на минимальный выпуск OSX, который вы хотите поддерживать.
Когда вы сделаете это, должна быть возможность развертывания в более старых выпусках OSX. Я регулярно делаю это для создания приложений на машине 10.8, которые развертываются на машине 10.5.
Вам необходимо позаботиться о включении других библиотек, особенно если они включают скрипт configure: иногда скрипт configure обнаруживает функциональность, которая доступна на компьютере сборки, но не на компьютере развертывания.
КСТАТИ. Вы должны ссылаться на ту же версию Python, которую вы используете во время выполнения. ABI CPython не совместим между выпусками функций (то есть, ABI 2.6 не обязательно совместим с ABI 2.7). Для python 3.x существует стабильный ABI, совместимый между выпусками функций, но AFAIK, который в первую очередь нацелен на расширения Python, и я не знаю, насколько это полезно для встраивания Python в ваше приложение.