Python.framework отсутствует в OS X 10.9 SDK. Зачем? Также: Обходной путь?
Система
- OS X Mavericks 10.9 13A603
- Xcode Version 5.0.1 (5A2053)
Проблема:
Python.framework, кажется, отсутствует в Xcode 10.9 SDK.
Python.framework существует в SDK Xcode 10.8:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Python.framework
Однако здесь отсутствует мой Xcode 10.9 SDK:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/
Это нечетно, потому что Python.framework по-прежнему доступен пользователям в 10.9 системах:
/System/Library/Frameworks/Python.framework
Была ли умышленно удалена Python.framework из 10.9 SDK? Является ли это не столь тонким намеком от Apple прекратить использование этой структуры? Или я просто смущен?
Примечания:
Это важно, потому что у меня есть приложение OS X, которое связано с Python.framework. Кажется, я не могу создать мое приложение с настройкой Base SDK 10.9, так как Python.framework отсутствует, и я должен ссылаться на него.
Меня интересуют оба объяснения, почему эта структура отсутствует (или почему я ошибаюсь и ее вообще не хватает), а также предложения об обходных методах.
Ответы
Ответ 1
Существует официальная страница поддержки Apple по этому вопросу:
Изменения для встраивания Python с использованием Xcode 5.0
В основном, они говорят, что метод интеграции с Python с SDK Python.framework
устарел, и вместо этого следует использовать стандартный метод * nix использования заголовка python.h
.
То есть (приведенные ниже инструкции являются сводкой - просмотрите связанную статью для получения более подробной информации):
- Замените
#include <Python/Python.h>
на #include <Python.h>
;
- Включить расположение заголовка Python в пути поиска заголовка;
- Удалите
Python.framework
из сборки проекта;
- Добавить файл python
.dylib
в Xcode;
Что касается обоснования, они не детализируют его, они просто указывают, что:
Поскольку Python является фреймворком, он также находится в SDK, хотя Python (или любой язык сценариев) сталкивается с трудностями в двух местах. Из-за как долгосрочных, так и недавних проблем было принято решение удалить Python из SDK.
Ответ 2
Я столкнулся (и решил) эту проблему:
/bin/sh ../libtool --silent --tag=CC --mode=link gcc -I../include -I../ -g -O2 -Wall \
-isysroot <blah>/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk \
-Wl,-F/System/Library/Frameworks \
-framework Python \
-u _PyMac_Error \
-o libdnet.la -\
rpath /usr/local/lib *.lo
Первоначально вещи, которые выскочили изначально, заключались в том, что gnu libtool, который я использовал, сделал флаг -Wl
, добавленный в начале -F
. Итак, я добавил
-F/System/Library/Frameworks
-L/System/Library/Frameworks (just to be safe)
Тогда другая вещь, которая была довольно очевидна, заключалась в том, что "-framework Python" не имел .framework-суффикса, как обычно. Итак, я добавил, что также
-framework Python.framework
Я все еще не мог заставить работать. Затем я понял, что это было:
Короче говоря, я не знаю, почему это работает или почему они что-то изменили, и мне особенно мешает, что Python.framework больше не находится в SDK (правда, это всегда было странно связать с ним, но мне потребуется некоторое время, чтобы переобучиться.
-framework
просто нужно изменить на -F
Бонусный раунд, есть объект настроек системы Python, а также программа CLI "python-config", которая должна быть исправлена, чтобы они больше не распространяли эту плохую настройку.
Ответ 3
Похоже, что Python.framework был умышленно удален Apple:
https://developer.apple.com/library/mac/releasenotes/General/APIDiffsMacOSX10_9/index.html
Документ с API-интерфейсом 10.9 API от Apple показывает, что он удален.
Ответ 4
Рамка станет доступной, если вы установите инструменты командной строки Xcode:
xcode-select --install