在Mac OS X Mavericks上安装py-ldap(缺少sasl.h)

时间:2014-02-27 20:04:34

标签: python ldap osx-mavericks

我似乎无法在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

但是有同样的错误。

我希望有人可以帮助我。

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放在路径上,这似乎有效。

一些消息来源:
how to install PIL on Macosx 10.9?

答案 5 :(得分:0)

运行扩展时出现此错误。

我修复了它,首先找到了sasl.h文件:

mdfind -name sasl.h

然后定义相应的CFLAGS环境变量:

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

并最终再次运行扩展。