最近,我花了几个小时撕掉我的头发(或者剩下的东西),尝试将python-ldap(通过pip)安装到Redhat Enterprise服务器上。
这是我会得到的错误消息(看起来很熟悉?):
Modules/constants.c:365: error: ‘LDAP_CONTROL_RELAX’ undeclared (first use in this function)
error: command 'gcc' failed with exit status 1
如果只有那里有人可以帮助我!
答案 0 :(得分:17)
但是等等!我可以帮助你,因为我在经过大量的诅咒之后想出来了!
根据docs,您必须在系统上安装OpenLDAP库。在我写这些库的版本要求时,是> = 2.4.11
要查看您的系统上是否安装了此类库,请运行以下命令:yum list installed openldap*
以下是我系统的输出,作为您可能会看到的示例:
PACKAGE VERSION
openldap24-libs.i386 2.4.23-5.el5
openldap24-libs.x86_64 2.4.23-5.el5
openldap24-libs-devel.i386 2.4.23-5.el5
openldap24-libs-devel.x86_64 2.4.23-5.el5
所以,就我而言,我已经安装了库。如果你不只是运行:
sudo yum install openldap24-libs-devel
sudo yum install openldap24-libs
如果软件包已经安装且pip仍然失败,那么setup.cfg脚本可能在错误的位置查找所需的库文件。那么,让我们找出原因 它们存在于我们的系统中。
这样做:
rpm -ql openldap24-libs
rpm -ql openldap24-libs-devel
你应该得到这样的东西(我已经缩写了,所以我们可以更容易地看到涉及的目录)。
rpm -ql openldap24-libs
/usr/lib64/...
/usr/lib/...
rpm -ql openldap24-libs-devel
/usr/include/openldap24/...
/usr/lib/openldap24/...
/usr/lib64/openldap24/...
build
目录(你会找到同一个地方/ bin,/ include,/ lib和/man.build
目录中你应该找到`python-ldap / setup.cfg'。你应该在文件顶部看到这个:
[_ldap]
library_dirs = /opt/openldap-RE24/lib /usr/lib
include_dirs = /opt/openldap-RE24/include /usr/include/sasl /usr/include
显然,这是错误的。在目前列出的目录中添加您在步骤2 前面中找到的目录,以便最终得到类似的结果:
[_ldap]
library_dirs = /usr/lib64/openldap24 /usr/lib/openldap24 /usr/lib64 /opt/openldap-RE24/lib /usr/lib
include_dirs = /usr/include/openldap24 /opt/openldap-RE24/include /usr/include/sasl /usr/include
保存文件后,您只需再次运行pip install python-ldap
即可。安装过程将查看您的更新setup.cfg,并且无需任何其他问题即可安装。
答案 1 :(得分:3)
eikonomega's answer中第3步的替代方法:
$ export CPATH=/usr/include/openldap24/
$ export LIBRARY_PATH=/usr/lib64/openldap24/
然后:
$ pip install python-ldap
无需破解setup.cfg!