Подтвердить что ты не робот

Установка py-ldap на Mac OS X Mavericks (отсутствует sasl.h)

Кажется, я не могу установить модуль python ldap на мой компьютер с OS X Mavericks 10.9.1.

Детали ядра: uname -a Darwin 13.0.0 Darwin Kernel Версия 13.0.0: Чт, 19 сентября 22:22:27 PDT 2013; root: xnu-2422.1.72 ~ 6/RELEASE_X86_64 x86_64

Я попробовал то, что было предложено здесь: http://projects.skurfer.com/posts/2011/python_ldap_lion/

Но когда я пытаюсь использовать pip, я получаю другую ошибку

Modules/LDAPObject.c: 18: 10: фатальная ошибка: файл 'sasl.h' не найден

* # include sasl.h

Я также попробовал то, что было предложено здесь: python-ldap OS X 10.6 и Python 2.6

Но с той же ошибкой.

Я надеюсь, что кто-то может помочь мне здесь.

4b9b3361

Ответ 1

используя фрагменты из ответов @hharnisc и @mick-t.

pip install python-ldap \
   --global-option=build_ext \
   --global-option="-I$(xcrun --show-sdk-path)/usr/include/sasl"

Ответ 2

Обходной путь
/usr/include, похоже, перемещается

$ xcrun --show-sdk-path    
$ sudo ln -s <the_path_from_above_command>/usr/include /usr/include

Теперь запустите pip install!

Ответ 3

В моем конкретном случае я не мог просто использовать аргументы pip, отмеченные в других ответах, потому что я использую его с tox для установки зависимостей из файла requirements.txt, и мне нужен мой tox.ini для совместимости с не-Mac-средами.

Мне удалось решить это гораздо проще: экспортировать CFLAGS так, чтобы он добавлял путь include к заголовкам sasl, уже установленным Xcode:

$ pip install python-ldap
    ...
    building '_ldap' extension
    creating build/temp.macosx-10.10-x86_64-2.7
    creating build/temp.macosx-10.10-x86_64-2.7/Modules
    clang -fno-strict-aliasing -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=2.4.19 -IModules -I/opt/openldap-RE24/include -I/usr/include/sasl -I/usr/include -I/Users/bc/.pyenv/versions/2.7.10/include/python2.7 -c Modules/LDAPObject.c -o build/temp.macosx-10.10-x86_64-2.7/Modules/LDAPObject.o
    Modules/LDAPObject.c:18:10: fatal error: 'sasl.h' file not found
    #include <sasl.h>
             ^
    1 error generated.
    error: command 'clang' failed with exit status 1

$ export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include/sasl"

$ pip install python-ldap
...
Successfully installed python-ldap-2.4.19

В зависимости от того, используете ли вы какие-либо удобные для пользователей инструменты Python (я использую pyenv), вам может потребоваться префикс команд вашего пика sudo.

Ответ 4

У меня была та же проблема. Я использую Macports на своем Mac, и у меня установлен cyrus-sasl2, который предоставляет sasl.h в /opt/local/include/sasl/. Вы можете передать параметры build_ext, используя аргумент global global. Чтобы передать include PATH в /opt/local/include/sasl/sasl.h, выполните следующие действия:

pip install python-ldap --global-option=build_ext --global-option="-I/opt/local/include/sasl"

В качестве альтернативы вы можете указать его на то, что обеспечивает вывод из xcrun --show-sdk-path. На моей коробке это: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk

Затем вам нужно определить PATH для файлов заголовков sasl. Для меня это:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sasl/

Сообщите мне, поможет ли вам или вам нужна рука.

Ответ 5

Я использовал комбинацию сообщений, которые я нашел об этой проблеме (включая эту), чтобы в итоге придумать это (скопировано из более крупного script):

export XC_SDK=$(xcrun --show-sdk-path)
export USR_INC=$XC_SDK/usr/include
export PATH=$USR_INC:$PATH

echo "installing python-ldap"
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install python-ldap

Вы можете проверить его с помощью python -c "import ldap"

Основная причина, по которой я не следовал совету @hharnisc, заключался в том, что на моей локальной машине /usr/local не было перемещено, поэтому я просто временно помещал $XC_SDK перед этим на пути, и это, похоже, работает.

некоторые источники:
как установить PIL на MacOSX 10.9?

Ответ 6

Я получил эту ошибку при запуске buildout.

Я исправил это, сначала найдя файл sasl.h:

mdfind -name sasl.h

затем определяем соответствующую переменную среды CFLAGS:

export CFLAGS="-I/opt/local/include/sasl"

и, наконец, снова запустить buildout.