【问题标题】:Installing py-ldap on Mac OS X Mavericks (missing sasl.h)在 Mac OS X Mavericks 上安装 py-ldap(缺少 sasl.h)
【发布时间】:2014-03-31 12:16:30
【问题描述】:

我似乎无法在我的 OS X Mavericks 10.9.1 机器上安装 python ldap 模块。

内核详细信息: unname -a 达尔文 13.0.0 达尔文内核版本 13.0.0:2013 年 9 月 19 日星期四 22:22:27 PDT;根: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

但同样的错误。

我希望有人可以在这里帮助我。

【问题讨论】:

    标签: python ldap osx-mavericks


    【解决方案1】:

    解决方法
    /usr/include 似乎已移动

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

    现在运行 pip install!

    【讨论】:

    • 我才看到这个,运气不好。
    • 太棒了!这只是解决了我这边的很多事情
    • 为我在 OSX Mavericks 上工作过。
    • 在优胜美地为我工作。单线:sudo ln -s `xcrun --show-sdk-path`/usr/include /usr/include.
    • 如果您启用了SIP,这将不再适用于 El Capitan。另一种方法(将-I 传递给pip)有效。
    【解决方案2】:

    我遇到了同样的问题。我在我的 Mac 上使用 Macports,并且安装了 cyrus-sasl2,它在 /opt/local/include/sasl/ 中提供了 sasl.h。您可以使用 pip 的 global-option 参数将选项传递给 build_ext。要将包含路径传递给 /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 头文件的路径。对我来说是:

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

    如果有帮助或者您需要帮助,请告诉我。

    【讨论】:

    【解决方案3】:

    我结合了我发现的关于这个问题的帖子(包括这个)最终想出了这个(从一个更大的脚本复制):

    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?

    【讨论】:

      【解决方案4】:

      使用来自@hharnisc 和@mick-t 答案的片段。

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

      【讨论】:

      • 我在 mac 上没有 sudo 权限,这只是成功了!
      • 这对我也适用于优胜美地。我不需要为此特定安装安装任何与 macports 或 homebrew 相关的东西。谢谢!
      • 这也适用于启用系统完整性保护的 El Capitan / 10.11。
      • 我在手动创建链接时遇到了问题,就像@hharnisc 的解决方案(ln: /usr/include: Operation not permitted,即使是 sudo)一样,但这在 El Capitan 上有效。
      • 要解决有关权限的问题并隔离库安装,我建议使用 virtualenv: "python -m virtualenv /yoursource; /yoursouhce/bin/pip install blah" 这将安装所有本地项目到您的项目并避免与其他项目发生冲突。
      【解决方案5】:

      在我的特殊情况下,我不能简单地使用其他答案中提到的 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

      【讨论】:

      • 在 OS X Yosemite 中为我工作。谢谢!
      • 还有High Sierra。 +1 :)
      【解决方案6】:

      运行构建时出现此错误。

      我修好了,先找到sasl.h文件:

      mdfind -name sasl.h
      

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

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

      最后再次运行 buildout。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-11
        • 2013-11-17
        • 1970-01-01
        • 2014-04-24
        • 2015-12-24
        • 2013-12-27
        • 1970-01-01
        • 2014-02-09
        相关资源
        最近更新 更多