Pyldap(使用 Django Auth LDAP)安装在 python3 virtualenv 中



我正在尝试安装 pyldap 以将其与 django-auth-ldap 一起使用,但在执行时:

 pip install pyldap

我得到:

 In file included from Modules/LDAPObject.c:4:0:
 Modules/common.h:10:20: fatal error: Python.h: No such file or directory
 #include "Python.h"
                    ^
compilation terminated.
error: command 'gcc' failed with exit status 1

重要

我正在使用Virtualenv,女巫是用python3创建的:

virtualenv -p python3 myvirtualenv

而且我已经安装了开发包(我在 CentOS 中,在此答案中找到):

sudo yum install python-devel
sudo yum install openldap-devel

我已经尝试过的

创建两个新的虚拟环境:

  • 一个使用 python 3.4(使用上面的命令)并且pip install pyldap不起作用(出现上述错误)
  • 一个使用 python 2.7(使用上面的命令而不带 -p python3 ),pip install pyldap工作
  • 将软件包安装为 root sudo pip3 install pyldap并且可以工作,但是当我在 virtualenv 的 django 应用程序中运行时,我得到:

    import ldap
    ImportError: No module named 'ldap'
    

我假装使用 pyldap 正是因为它支持 python3,所以我不明白为什么会发生这种情况以及如何解决它。如果你不能直接回答这个问题,但你知道我可能用于 Django 中 Active Directory 身份验证的其他库,请评论这个问题。

无法使用 sudo 将软件包安装到virtualenv中。必须仅使用 sudo 来安装依赖项。例如

sudo apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev

更新:但是,如果你系统的python默认版本是2.x,而你的virtualenv是3.x,你实际上需要安装python3-dev而不是python-dev。

对于实际安装

source myvirtualenv/bin/activate
pip3 install pyldap

您在这里使用的是 pip3,因此请确保您的 virtualenv 已设置为使用 python 3 和如下命令:

virtualenv -p python3 myvirtualenv

您可以通过输入 python shell 来了解是否实际使用了哪个版本。

作为脚注,如果您确实想以 root 身份安装软件包:

sudo -i
source myvirtualenv/bin/activate
pip3 install pyldap

你必须安装 python-dev 包(假设你使用 Ubuntu/Debian Linux)

sudo apt-get install python-dev

然后尝试使用 pip3 安装 pyldap,而无需 sudo。