Skip to main content
 首页 » 编程设计

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

2024年08月22日31cloudgamer

我正在尝试安装 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,witch 是在 python3 中创建的:

virtualenv -p python3 myvirtualenv 

并且我已经安装了开发包(我在 CentOS 中,在这个 answer 中找到):

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