我似乎无法在OS X Mavericks 10.9.1计算机上安装python ldap模块。
内核详细信息: uname -a Darwin 13.0.0 Darwin内核版本13.0.0:Thu Sep 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 and Python 2.6
但是有同样的错误。
我希望有人可以帮助我。
答案 0 :(得分:89)
使用来自@hharnisc和@ mick-t答案的作品。
pip install python-ldap \
--global-option=build_ext \
--global-option="-I$(xcrun --show-sdk-path)/usr/include/sasl"
答案 1 :(得分:32)
解决方法
/ usr / include似乎已移动
$ xcrun --show-sdk-path
$ sudo ln -s <the_path_from_above_command>/usr/include /usr/include
现在运行pip install!
答案 2 :(得分:18)
在我的特定情况下,我不能简单地使用其他答案中提到的pip
参数,因为我正在使用tox
来安装requirements.txt文件中的依赖项,我需要我的tox.ini保持与非Mac环境兼容。
我能够以更简单的方式解决这个问题:导出CFLAGS
,以便为Xcode已经安装的sasl头添加一个包含路径:
$ 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),您可能必须在pip命令前添加sudo
前缀。
答案 3 :(得分:5)
我遇到了同样的问题。我在我的Mac上使用Macports并且安装了cyrus-sasl2,它在/ opt / local / include / sasl /中提供了sasl.h。您可以使用pip的global-option参数将选项传递给build_ext。要将包含PATH传递给/opt/local/include/sasl/sasl.h,请运行pip,如下所示:
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
然后,您需要确定sasl头文件的PATH。对我而言:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sasl/
如果有帮助或者您需要帮助,请告诉我。
答案 4 :(得分:0)
我使用了我发现的关于这个问题(包括这个问题)的帖子的组合,最终想出了这个(从更大的脚本中复制):
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放在路径上,这似乎有效。
答案 5 :(得分:0)
运行扩展时出现此错误。
我修复了它,首先找到了sasl.h文件:
mdfind -name sasl.h
然后定义相应的CFLAGS环境变量:
export CFLAGS="-I/opt/local/include/sasl"
并最终再次运行扩展。