Устранить ошибку GCC при установке python-ldap на Redhat Enterprise Server

Python-LDAP + Redhat = скрежет зубов

Недавно я несколько часов рвал на себе волосы (или то, что от них осталось), пытаясь установить 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

Если бы только был кто-то, кто мог бы мне помочь!


person eikonomega    schedule 12.09.2013    source источник


Ответы (2)


Но ждать! Я могу помочь вам, потому что я понял это после обильного количества проклятий!

Шаг 1. Убедитесь, что установлены необходимые компоненты

Согласно документам, в вашей системе должны быть установлены библиотеки 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

Шаг 2: Где были установлены эти пакеты?

Если пакеты уже установлены, а 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/...

Шаг 3. Проверьте файл setup.cfg Pip на наличие python-ldap

  • Когда команда установки pip терпит неудачу, она оставляет после себя каталог build внутри базового каталога интерпретатора Python (там же, где вы найдете /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

Шаг 4: Повторно запустите установку и ПОЛУЧИТЕ ПРИБЫЛЬ!

После сохранения файла вы можете просто снова запустить pip install python-ldap. Процесс установки рассмотрит ваш файл setup.cfg и должен установиться без каких-либо дополнительных проблем.

person eikonomega    schedule 12.09.2013
comment
Я тоже столкнулся с этой проблемой, пытаясь безуспешно установить python-ldap на RHEL 6. По какой-то странной причине в репозитории yum нет openldap24-libs (или -libs-devel). Но я нашел обходной путь, установив пакет openldap-devel согласно stackoverflow.com/a/13159938/1397412 ( ссылка на случай, если кто-то еще просматривает руководство по устранению неполадок!) - person penguin; 22.12.2013

Альтернатива шагу 3 в ответе eikonomega:

$ export CPATH=/usr/include/openldap24/
$ export LIBRARY_PATH=/usr/lib64/openldap24/

тогда:

$ pip install python-ldap

Нет необходимости взламывать setup.cfg!

person Jabberwocky    schedule 25.01.2015
comment
Альтернатива какому шагу 3? (Я знаю, сейчас есть только один другой ответ, но это может измениться...) - person SamB; 25.01.2015
comment
Верно! Добавлена ​​ссылка на исходный ответ. Это уместно? - person Jabberwocky; 25.01.2015
comment
Да, это сработает, но URL-адрес был уродливым и не очень читабельным, поэтому я немного подправил его для вас. - person SamB; 25.01.2015