Ответ 1
используя фрагменты из ответов @hharnisc и @mick-t.
pip install python-ldap \
--global-option=build_ext \
--global-option="-I$(xcrun --show-sdk-path)/usr/include/sasl"
Кажется, я не могу установить модуль 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
Но с той же ошибкой.
Я надеюсь, что кто-то может помочь мне здесь.
используя фрагменты из ответов @hharnisc и @mick-t.
pip install python-ldap \
--global-option=build_ext \
--global-option="-I$(xcrun --show-sdk-path)/usr/include/sasl"
Обходной путь
/usr/include, похоже, перемещается
$ xcrun --show-sdk-path
$ sudo ln -s <the_path_from_above_command>/usr/include /usr/include
Теперь запустите pip install!
В моем конкретном случае я не мог просто использовать аргументы 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
.
У меня была та же проблема. Я использую 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/
Сообщите мне, поможет ли вам или вам нужна рука.
Я использовал комбинацию сообщений, которые я нашел об этой проблеме (включая эту), чтобы в итоге придумать это (скопировано из более крупного 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?
Я получил эту ошибку при запуске buildout.
Я исправил это, сначала найдя файл sasl.h:
mdfind -name sasl.h
затем определяем соответствующую переменную среды CFLAGS:
export CFLAGS="-I/opt/local/include/sasl"
и, наконец, снова запустить buildout.