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", которая должна быть исправлена, чтобы они больше не распространяли эту плохую настройку.

Ответ 4

Рамка станет доступной, если вы установите инструменты командной строки Xcode:

xcode-select --install