Обзор:
Ручная сборка, которую вы пытаетесь выполнить, выглядит так, как будто она может дать сбой, потому что она ссылается на OS X 10.6 SDK, которого у вас, вероятно, нет, и по большей части устарел. Кроме того, SDK теперь хранятся в совершенно другом месте, чем когда SDK 10.6 был в расцвете сил.
Расположение нового SDK:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
Расположение старых SDK:
/Developer/SDKs/
Несуществующий / устаревший SDK:
Поскольку кажется, что при попытке собрать PyCrypto он ссылается на MacOSX10.6.sdk
, необходимо учитывать несколько вещей:
- Почему он ссылается на устаревший SDK
- Где находится SDK, на который он ссылается
- Что нужно сделать, чтобы исправить проблему
Если мы не проведем тщательный аудит исходного кода, мы можем не знать точно, где установлены неправильные флаги, но мы можем сделать все возможное, чтобы работать с имеющейся у нас информацией. Из ошибки видно, что в нескольких случаях всплывает имя SDK 10.6:
/usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -fwrapv -Wall -Wstrict-prototypes -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library
Построение из источника:
/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/MD2.c -o build/temp.macosx-10.6-intel-2.7/src/MD2.o
src/MD2.c:30:10: fatal error: 'string.h' file not found
#include <string.h>
^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
Анализируя это, мы видим, что файл PyCrypto MD2.c пытается быть построен с использованием флага -isysroot /Developer/SDKs/MacOSX10.6.sdk
. Вместо этого, возможно, стоит попробовать pip
:
Установка с помощью pip:
...
fatal error: 'string.h' file not found #include <string.h>
...
Та же ошибка; нам, вероятно, следует выяснить, существует ли заголовок <string.h>
в системе - Давайте сделаем быстрый тест C
приложения, чтобы выяснить:
Тестирование заголовков C:
$ echo "#include <string.h>
#include <stdio.h>
int main() { printf(\"TEST\n\"); return 0; }" > t.c
$ clang t.c -o t
$ ./t
TEST
Очевидно, что заголовок существует, потому что тест прошел нормально. Это говорит нам о том, что проблема, скорее всего, напрямую связана с SDK 10.6 (который, похоже, не существует в системе).
Символьные ссылки (несуществующие) из SDK 10.6 в SDK 10.11:
Поскольку мы не определили, где на самом деле устанавливается SDK, мы продолжим и попытаемся создать символические ссылки, чтобы любая ссылка на старый SDK 10.6 ссылалась на последний SDK (в настоящее время 10.11):
$ cd /Developer/SDKs
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk MacOSX10.6.sdk
Мы можем проверить символическую ссылку, введя следующую команду:
$ ls -lat
total 8
drwxr-xr-x 3 root wheel 102 Feb 21 15:54 .
lrwxr-xr-x 1 root wheel 99 Feb 21 15:54 MacOSX10.6.sdk -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
drwxr-xr-x 3 root wheel 102 Feb 21 15:52 ..
Теперь, когда мы успешно создали символическую ссылку, давайте еще раз попробуем установить PyCrypto с помощью pip:
$ sudo pip install pycrypto
Collecting pycrypto
Downloading pycrypto-2.6.1.tar.gz (446kB)
100% |████████████████████████████████| 446kB 1.2GB/s
Installing collected packages: pycrypto
Running setup.py install for pycrypto ... done
Successfully installed pycrypto-2.6.1
Ошибок нет! Похоже, наша проблема решена! Ну, почти...
Нам все еще нужно выяснить, что отвечает за установку неправильного (10.6) SDK во время сборки. Давайте воспользуемся инструментом xcrun
, чтобы посмотреть, какие значения установлены по умолчанию:
$ xcrun --show-sdk-version
10.11
Системный SDK по умолчанию установлен на 10.11, поэтому он должен быть неправильно установлен на 10.6 Python, PyCrypto или какой-либо другой аномалией, которую мы могли не учитывать.
ОБНОВИТЬ:
После некоторой разведки было обнаружено, что Python 3, похоже, построен с SDK для OS X 10.6. Кроме того, он также устанавливает SDK на 10.6 и устанавливает (устаревший) путь во многих местах Python_Framework
. Здесь так много ссылок, что я не стану перечислять их все, хотя вот пример:
Python_Framework Folder/Versions/3.5/lib/python3.5/config-3.5m/Makefile:79:CONFIGURE_CFLAGS= -arch i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk
Я могу только предположить, что разработчики пытались обеспечить максимально возможную обратную совместимость, однако, к сожалению, это нарушает прямую совместимость в процессе.
Примечания:
Установка пакетов Python с помощью pip
может значительно облегчить жизнь способов (управление пакетами, обновление, удаление и т. д.). Например, для установки PyCrypto достаточно ввести команду:
$ sudo pip install pycrypto
Если у вас есть несколько Python, вы можете использовать номер версии для установки для этого Python соответственно:
$ sudo pip3.5 install pycrypto
↳ https://pip.pypa.io/en/stable/installing/
person
l'L'l
schedule
21.02.2016
make
иgcc
в терминал, как рекомендовано этим вопрос, чтобы проверить, установлены ли у меня инструменты командной строки XCode, и они сказали мнеclang: error: no input files
иmake: *** No targets specified and no makefile found. Stop.
соответственно, что означало бы, что я их установил. Я попытался запуститьxcode-select -p; echo $?
, и он сказал мне0
, что также должно означать, что они установлены. - person Elias Zamaria   schedule 18.02.2016sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer /Developer
, затемsudo ln -s /Developer/SDKs/MacOSX10.11.sdk MacOSX10.6.sdk
. Я получаю ту же ошибку при запускеpython3 setup.py build
. - person Elias Zamaria   schedule 18.02.2016ls -al /usr/include
? Если что-то не так, попробуйтеsudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include /usr/include
? - person adarsh   schedule 18.02.2016ls -al /usr/include
и получилls: /usr/include: No such file or directory
. Я попробовалsudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include /usr/include
, не ожидал, что это сработает, а просто хотел посмотреть, что произойдет, и он сказал мнеln: /usr/include: Operation not permitted
. - person Elias Zamaria   schedule 18.02.2016/usr/include
не существует. У кого-то здесь, похоже, была аналогичная проблема, и она была решена с помощьюxcode-select --install
. Надеюсь, это сработает? - person adarsh   schedule 18.02.2016xcode-select --install
, затем запустилpython3 setup.py build
, и он сказал мнеclang: error: unable to find utility "clang", not a developer tool or in PATH
, затемerror: command '/usr/bin/clang' failed with exit status 72
. - person Elias Zamaria   schedule 18.02.2016unset DYLD_LIBRARY_PATH
? - person adarsh   schedule 18.02.2016echo $DYLD_LIBRARY_PATH
и ничего не увидел, поэтому сомневаюсь, что его сброс что-то исправит. Но я попытался запуститьunset DYLD_LIBRARY_PATH
, затемpython3 setup.py build
и получил ту же ошибкуclang: error: unable to find utility "clang", not a developer tool or in PATH
. - person Elias Zamaria   schedule 18.02.2016Dyld Error Message
. Я думаю, что я что-то напортачил, но не знаю что, и у меня еще не было возможности понять это. Если кто-то читает это, я бы рекомендовал не пробовать ничего из того, что упомянуто в этих комментариях. - person Elias Zamaria   schedule 18.02.2016python3 setup.py build
безstring.h
ошибки. - person Elias Zamaria   schedule 20.02.2016/Developer/SDKs/MacOSX10.6.sdk
предполагает, что вы используете 10.6 sdk? - person skyline75489   schedule 21.02.2016python3 setup.py build
. Я не знаю, почему он пытается использовать SDK 10.6. Кстати, я пробовал запуститьls /Developer/SDKs/
и увиделMacOSX10.5.sdk
иMacOSX10.6.sdk
и больше ничего. - person Elias Zamaria   schedule 21.02.2016/Developer/
нет! Какой результатxcode-select -p
? - person skyline75489   schedule 21.02.2016xcode-select -p
и получил/Applications/Xcode.app/Contents/Developer
. - person Elias Zamaria   schedule 21.02.2016