Python ldap AttributeError - PullRequest
       10

Python ldap AttributeError

10 голосов
/ 24 марта 2010

У меня ошибка Python AttributeError: у объекта 'module' нет атрибута 'initialize' Я использую Python 2.6.2 в Solaris 10 UNIX и недавно установил pythonldap 2.3.9. Сценарий очень простой, содержит только эти 2 строки. Может кто-нибудь сказать мне, почему? Ошибка трассировки ниже.

#!/usr/local/bin/python

import ldap, sys

con = ldap.initialize('ldap://localhost')

Traceback (последний вызов был последним): Файл "./myldap.py", строка 5, в con = ldap.initialize ('ldap: // localhost') AttributeError: у объекта 'module' нет атрибута 'initialize'

С уважением, Jenny

Ответы [ 6 ]

31 голосов
/ 24 марта 2010

Вы назвали файл в текущем каталоге ldap.py, который скрывает тот, который вам нужен?

6 голосов
/ 04 декабря 2017

Многие люди предлагают гораздо более сложные решения ... Проще говоря, pip-установка модуля ldap не работает. Вам необходимо установить пакет python-ldap из apt или yum.

4 голосов
/ 24 марта 2010

Простой способ определить, подходит ли импортируемый вами ldap, - напечатать ldap.__file__, который печатает полный путь к файлу модуля (обычно это «.pyc»). Если это не тот, который установлен в месте, которое вы ожидаете, это ваша проблема, как предложил Майк Грэм .

2 голосов
/ 03 мая 2018

Я полагаю, вы установили "pip install ldap"! В этом модуле «инициализировать» или «открыть» нет. Удалите этот «ldap» с помощью «pip uninstall ldap» и попробуйте «yum install python-ldap». И запустить тот же код. Напечатайте "con".

2 голосов
/ 24 марта 2010

Вы можете получить эту ошибку, если вы каким-то образом получаете «ldap.py» из sos / plugins / вместо самого пакета ldap. Убедитесь, что пакет "python-ldap" действительно установлен ...

0 голосов
/ 31 января 2019

Я успешно установил соединение ldap. Как ехать:

1.У меня есть Python v 3.7.2

2.Установите python-ldap: для этого я попытался " pip установить python-ldap ", но это не сработало для меня на машине windows, поэтому я использую альтернативу ниже.

3.Для установки ldap перейдите сюда: https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap и загрузите python_ldap ‑ 3.1.0 ‑ cp37 ‑ cp37m ‑ win_amd64.whl

4. Теперь перейдите в каталог загрузки и запустите " pip install python_ldap ‑ 3.1.0 ‑ cp37 ‑ cp37m ‑ win_amd64.whl"

  1. Теперь откройте оболочку Python и проверьте «import ldap», если вы не получили ошибку, значит, все готово.

Это пример кода:

#Resource of code :https://gist.github.com/ibeex/1288159
import ldap
def check_credentials(username, password):

   """Verifies credentials for username and password.
   Returns None on success or a string describing the error on failure
   # Adapt to your needs
   """
   LDAP_SERVER = 'xxx'
   # fully qualified AD user name
   LDAP_USERNAME = '%s@spi.com' % username
   # your password
   LDAP_PASSWORD = password
   base_dn = 'DC=spi,DC=com'
   ldap_filter = 'userPrincipalName=%s@spi.com' % username
   attrs = ['memberOf']
   try:
       # build a client
       ldap_client = ldap.initialize(LDAP_SERVER)
       # perform a synchronous bind
       ldap_client.set_option(ldap.OPT_REFERRALS,0)
       ldap_client.simple_bind_s(LDAP_USERNAME, LDAP_PASSWORD)
   except ldap.INVALID_CREDENTIALS:
     #print("wron")
     ldap_client.unbind()
     return 'Wrong username or password'
   except ldap.SERVER_DOWN:
       #print("down")
       return 'AD server not awailable'
   # all is well
   # get all user groups and store it in cerrypy session for future use
   ab = str(ldap_client.search_s(base_dn,
                   ldap.SCOPE_SUBTREE, ldap_filter, attrs)[0][1]['memberOf'])
   #print("ab"+ab)             
   ldap_client.unbind()
   return 'success'
if __name__ == "__main__":
    u="chirag"
    p="secred"
    print(check_credentials(u,p))   
...