2017-04-10 31 views
5

Próbuję skonfigurować python-ldap na macOS Sierra. Kiedy próbuję użyć modułu (który działa w moim live env działającym na CentOS) Otrzymuję poniższy błąd, który przy wyszukiwaniu wygląda na coś związanego z instalacją OpenLDAP lub python-ldap na macOS, ale jestem jeszcze znaleźć artykuł wyjaśniający, jak to naprawić.Python ldap macOS - ValueError: błąd opcji

Dotąd mam zainstalowane OpenLDAP poprzez homebrew, które nie Naprawiono problem:

błąd:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 42, in inner 
    response = get_response(request) 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response 
    response = self._get_response(request) 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/views.py", line 47, in inner 
    return func(*args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper 
    return view(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/views.py", line 81, in login 
    if form.is_valid(): 
    File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 169, in is_valid 
    return self.is_bound and not self.errors 
    File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 161, in errors 
    self.full_clean() 
    File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 371, in full_clean 
    self._clean_form() 
    File "/usr/local/lib/python2.7/site-packages/django/forms/forms.py", line 398, in _clean_form 
    cleaned_data = self.clean() 
    File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/forms.py", line 191, in clean 
    self.user_cache = authenticate(username=username, password=password) 
    File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate 
    user = backend.authenticate(**credentials) 
    File "/itapp/itapp/backend.py", line 39, in authenticate 
    ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,settings.AD_CERT_FILE) 
    File "/usr/local/lib/python2.7/site-packages/ldap/functions.py", line 135, in set_option 
    return _ldap_function_call(None,_ldap.set_option,option,invalue) 
    File "/usr/local/lib/python2.7/site-packages/ldap/functions.py", line 66, in _ldap_function_call 
    result = func(*args,**kwargs) 
ValueError: option error 

Mam zainstalowany OpenLDAP poprzez napar zgodnie poniżej

alexs-mbp:~ alex$ brew install openldap 
Warning: openldap is a keg-only and another version is linked to opt. 
Use `brew install --force` if you want to install this version 
alexs-mbp:~ alex$ brew install openldap --force 
Warning: openldap-2.4.44 already installed, it's just not linked. 

i Mam zainstalowany python-ldap z pip

alexs-mbp:~ alex$ sudo pip install python-ldap 
The directory '/Users/alex/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
The directory '/Users/alex/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
Requirement already satisfied: python-ldap in /usr/local/lib/python2.7/site-packages 
Requirement already satisfied: setuptools in /usr/local/lib/python2.7/site-packages (from python-ldap 
+0

Wygląda na to, że może to być problem związany z kompilacją homebrew dla openldap - patrz http://thread.gmane.org/gmane.comp.python.ldap/1660 –

+0

https : //sourceforge.net/p/python-ldap/bugs/65/ wygląda na poprawiony zgodnie z tym – AlexW

+0

Naprawiono ich specyficzne środowisko.Być może jednak warto rozważyć obejście tego problemu. –

Odpowiedz

3

Rozwiązaniem dla mnie było to, że musiałem to biblioteki openldap piwny oparte kiedy robi pip install python-ldap

Informacje musisz można znaleźć wykonując brew info openldap gdzie jest napisane coś takiego:

For compilers to find this software you may need to set: 
    LDFLAGS: -L/usr/local/brew/opt/openldap/lib 
    CPPFLAGS: -I/usr/local/brew/opt/openldap/include 

Moja openldap zainstalować na /usr/local/brew/opt/openldap/ jest więc wymagane poleceniem:

LDFLAGS="-L/usr/local/brew/opt/openldap/lib" CPPFLAGS="-I/usr/local/brew/opt/openldap/include" pip install python-ldap 

Spróbuj odinstalować python-ldap (pip uninstall python-ldap), a następnie uruchomić brew info openldap i wykorzystać swoje specyficzne ścieżki do openldap lib i obejmuje katalog, w powyższym poleceniu

Uwaga: Miałem też problem z moim dzyń kompilator nie znajdowanie pakietu SDOS dla systemu MacOS sasl.h, ale nie wiem, czy to tylko ja. Zostało to rozwiązane przez dodanie --global-option=build_ext --global-option="-I$(xcrun --show-sdk-path)/usr/include/sasl" do powyższego wiersza poleceń:

+0

powinien był powiedzieć, upewnij się, że robisz 'pip uninstall python-ldap' najpierw, aby przekompilował się, gdy wykonałeś' install' - źle edytuj odpowiedź też – spacepickle

+0

To zadziałało! musiałem też wykonać opcje globalne – AlexW

2

zainstalowałem python-ldap (wersja 2.3.10_3) używając MacPorts na MacOS Sierra 10.12.4 z:

sudo port install py27-ldap 

ten pociągnął również zależność OpenLDAP (wersja 2.4.44_2).

mogę wykonać kod:

import ldap 
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'cacert-2017-01-18.pem') 

bez błędów (CA plików cert z https://curl.haxx.se/ca/cacert-2017-01-18.pem)

jakie kroki wykonać, aby nie instalować OpenLDAP i python-ldap?

Edit:

Chyba znalazłem something relevant, można spróbować kodu testowego powyżej pliku cert I połączone?

Podejrzewam błąd pozwolenie/format .pem

+0

Dodałem moją metodę instalacji do pytania, dzięki – AlexW

+0

pobrałem ten plik, a następnie cd do katalogu i uruchomić Pythona z tego katalogu, następnie powyższy kod, uzyskać ten sam ValueError: – AlexW