326

When I run the following command:

sudo pip install python-ldap

I get this error:

In file included from Modules/LDAPObject.c:9:

Modules/errors.h:8: fatal error: lber.h: No such file or directory

Any ideas how to fix this?

Community
  • 1
  • 1
VacuumTube
  • 3,801
  • 4
  • 20
  • 19

24 Answers24

573

The python-ldap is based on OpenLDAP, so you need to have the development files (headers) in order to compile the Python module. If you're on Ubuntu, the package is called libldap2-dev.

Debian/Ubuntu:

sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev

RedHat/CentOS:

sudo yum install python-devel openldap-devel
Bhavesh Odedra
  • 10,294
  • 12
  • 30
  • 58
AndiDog
  • 65,893
  • 20
  • 156
  • 201
  • 5
    Thanks for that. It's got further it's now failing with sasl.h no such file or directory – VacuumTube Jan 22 '11 at 14:57
  • 74
    @VacuumTube: Missing headers are almost always a sign for missing `-dev` packages (sometimes also named `-devel`). Just do `apt-cache search sasl | grep dev` and you'll probably find the right package - I would guess it's `libsasl2-dev`. – AndiDog Jan 22 '11 at 15:02
  • 6
    Anything for windows users :( Same error, no solutions so far – Shailen Aug 13 '13 at 14:37
  • 5
    You don't have to compile from source on Windows. Just use one of the installers from https://pypi.python.org/pypi/python-ldap/. – Semmel Sep 19 '13 at 02:14
  • 3
    Also, Windows users can extract the .msi installer @Semmel mentioned to install into a virtualenv: [How to install python-ldap on a python 2.7 virtualenv on windows without compiling](http://stackoverflow.com/questions/15918188/how-to-install-python-ldap-on-a-python-2-7-virtualenv-on-windows-without-compili) (see update 2) – Dave Oct 29 '13 at 17:11
  • On Windows you can also use Chris Gohlke's excellent resource for Windows installers: http://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap – Josh Hemann Feb 27 '14 at 17:18
  • Thanks @AndiDog. the issue was resolved as soon as I installed the `-dev` library :) – Babak K Aug 04 '15 at 20:27
  • 1
    Full list should be sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev – James Nov 10 '15 at 02:35
  • Notice that you need to run 'sudo apt-get update' first. – Slark Apr 10 '17 at 11:28
  • Well this is odd. I have installed `libldap2-dev` but the headers haven't been installed. Everything else in the package (libs, man pages) has. Edit: --reinstall and it's fine. – OrangeDog Mar 23 '18 at 17:39
  • @TrinhHoangNhu: Why this that the full list? Can you explain how you found those dependencies? – Lii Apr 27 '18 at 09:05
  • @Lii I found out that one since 2015. It may not correct now – James Apr 27 '18 at 16:37
  • 1
    Use `python3-dev` instead of `python-dev` if you are using Python 3. – phoenix Aug 09 '19 at 11:43
  • Sometimes also known as `python36-devel` or `python3-devel.x86_64` or `python36-devel.x86_64` (aws). When in doubt: `yum search python | grep -i dev` – Amit Naidu Aug 25 '20 at 23:56
153

To install python-ldap successfully with pip, following development libraries are needed (package names taken from ubuntu environment):

sudo apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev
I159
  • 27,484
  • 29
  • 93
  • 128
jmu
  • 3,559
  • 1
  • 22
  • 12
72

On CentOS/RHEL 6, you need to install:

sudo yum install python-devel
sudo yum install openldap-devel

and yum will also install cyrus-sasl-devel as a dependency. Then you can run:

pip-2.7 install python-ldap
Mike Pennington
  • 40,496
  • 17
  • 132
  • 170
Banjer
  • 7,808
  • 4
  • 45
  • 61
35

In Ubuntu it looks like this :

 $ sudo apt-get install python-dev libldap2-dev libsasl2-dev libssl-dev
 $ sudo pip install python-ldap
Abdoul Ndiaye
  • 193
  • 1
  • 7
Jeff Sheffield
  • 5,418
  • 3
  • 24
  • 31
29

"Don't blindly remove/install software"

In a Ubuntu/Debian based distro, you could use apt-file to find the name of the exact package that includes the missing header file.

# do this once
sudo apt-get install apt-file
sudo apt-file update

$ apt-file search lber.h
libldap2-dev: /usr/include/lber.h

As you could see from the output of apt-file search lber.h, you'd just need to install the package libldap2-dev.

sudo apt-get install libldap2-dev
Community
  • 1
  • 1
Gayan Weerakutti
  • 9,105
  • 63
  • 62
17

Windows: I completely agree with the accepted answer, but digging through the comments took a while to get to the meat of what I needed. I ran across this specific problem with Reviewboard on Windows using the Bitnami. To give an answer for windows then, I used this link mentioned in the comments:

Then, executed the following commands

easy_install pip
pip install python_ldap-2.4.20-cp27-none_win32.whl

(because I had python 2.7 and a 32bit install at that)

easy_install python-ldap
Jonathan
  • 6,038
  • 7
  • 44
  • 66
archangel76
  • 1,534
  • 2
  • 11
  • 18
14

For those having the same issue of missing Iber.h on Alpine Linux, in a docker image that you are trying to adapt to Alpine for instance.

The package you are looking for is: openldap-dev

So run

apk add openldap-dev

Available from version 3.3 up to Edge

Available for both armhf and x86_64 Architectures.

Ilhicas
  • 1,291
  • 1
  • 18
  • 24
6

On Fedora 22, you need to do this instead:

sudo dnf install python-devel
sudo dnf install openldap-devel
chfw
  • 4,412
  • 2
  • 26
  • 31
5

For alpine docker

apk add openldap-dev

if the python version is 3 and above try

pip install python3-ldap
Akhilraj N S
  • 8,671
  • 5
  • 33
  • 39
4

On openSUSE you need to install the packages openldap2-devel, cyrus-sasl-devel, python-devel and libopenssl-devel.

zypper install openldap2-devel cyrus-sasl-devel python-devel libopenssl-devel

Christian Berendt
  • 3,176
  • 2
  • 12
  • 22
3

python3 does not support python-ldap. Rather to install ldap3.

Agnel Amodia
  • 715
  • 7
  • 18
3
sudo apt-get install build-essential python3-dev python2.7-dev libldap2-dev libsasl2-dev slapd ldap-utils python-tox lcov valgrind
Thomas John
  • 1,987
  • 2
  • 20
  • 37
3

I had problems with the installation on Windows, so one of the solutions is to install the ldap package manually.

A few steps:

  • Go to the page pyldap or/and python-ldap and download the latest version *whl.
  • Open a console then cd to where you've downloaded your file like some-package.whl and use:
pip install some-package.whl

The current version for pyldap is 2.4.45. On a concrete example the installation would be:

pip install .\pyldap-2.4.45-cp37-cp37m-win_amd64.whl

# or
pip install .\python_ldap‑3.3.1‑cp39‑cp39‑win_amd64.whl

Output:

Installing collected packages: pyldap
Successfully installed pyldap-2.4.45

EDIT

You can install the proper version for Python-3.X though using following command:

# if pip3 is the default pip alias for python-3
pip3 install python3-ldap

# otherwise 
pip install python3-ldap

Also here is the link of PiPy package for further information: python3-ldap 0.9.8.4

OR

ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python client library. The same codebase runs in Python 2, Python 3, PyPy and PyPy3: https://github.com/cannatag/ldap3

pip install ldap3
from ldap3 import Server, Connection, SAFE_SYNC

server = Server('my_server')
conn = Connection(server, 'my_user', 'my_password', client_strategy=SAFE_SYNC, auto_bind=True)

status, result, response, _ = conn.search('o=test', '(objectclass=*)') 
# usually you don't need the original request (4th element of the returned tuple)
Milovan Tomašević
  • 3,972
  • 1
  • 30
  • 29
2

On OSX, you need the xcode CLI tools. Just open a terminal and run:

xcode-select --install
Andy Fraley
  • 873
  • 8
  • 14
2

For most systems, the build requirements are now mentioned in python-ldap's documentation, in the "Installing" section.

If anything is missing for your system (or your system is missing entirely), please let maintainer know! (As of 2018, I am the maintainer, so a comment here should be enough. Or you can send a pull request or mail.)

Petr Viktorin
  • 62,694
  • 8
  • 78
  • 78
  • Thanks, might be worth noting that if you're running python3, you would need python3-devel, rather than python-devel. – Jamie Jun 26 '18 at 01:09
2

To correct the error due to dependencies to install the python-ldap : Windows 7/10

download the whl file

http://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap.

python 3.6 suit with

python_ldap-3.2.0-cp36-cp36m-win_amd64.whl

Deploy the file in :

c:\python36\Scripts\

install it with

python -m pip install python_ldap-3.2.0-cp36-cp36m-win_amd64.whl
Tono Kuriakose
  • 461
  • 4
  • 13
2

For ArchLinux/Manjaro for me helped the following command:

yay libldap24
zifter
  • 47
  • 6
1

As a general solution to install Python packages with binary dependencies [1] on Debian/Ubuntu:

sudo apt-get build-dep python-ldap
# installs system dependencies (but not the package itself)
pew workon my_virtualenv # enter your virtualenv
pip install python-ldap

You'll have to check the name of your Python package on Ubuntu versus PyPI. In this case they're the same.

Obviously doesn't work if the Python package is not in the Ubuntu repos.

[1] I learnt this trick when trying to pip install matplotlib on Ubuntu.

lofidevops
  • 13,448
  • 13
  • 75
  • 107
1

In FreeBSD 11:

pkg install openldap-client # for lber.h
pkg install cyrus-sasl # if you need sasl.h
pip install python-ldap
xsc27
  • 116
  • 1
  • 3
0

If you're working with windows machines, you can find 'python-ldap' wheel in this Link and then you can install it

pietà
  • 720
  • 1
  • 10
  • 34
0

for those who are using alphine linux, apk add openldap-dev

Vivin Veerali
  • 301
  • 3
  • 1
0

try:

ARCHFLAGS="-arch x86_64" pip3 install python-ldap
Simas Joneliunas
  • 2,705
  • 15
  • 25
  • 32
0

Adding also libzbar-dev solved for me the installation of python-ldap when building DOCKER

The full command becomes:

apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev libzbar-dev
Marco Cerliani
  • 19,335
  • 3
  • 34
  • 44
0

As of december 2021 there was/is a strange problem with the ldap library (at least in arch/manjaro).

While installing python-ldap (at 'Building wheel for python-ldap') I got the message 'ERROR: Failed building wheel for python-ldap':

  /usr/bin/ld: cannot find -lldap_r                                                                                                                     
  collect2: error: ld returned 1 exit status                                                                                                            
  error: command '/usr/bin/gcc' failed with exit code 1  

a workaround is provided here: https://github.com/python-ldap/python-ldap/issues/432#issuecomment-974799221

I cite:

As a workaround create the file /usr/lib64/libldap_r.so with content INPUT ( libldap.so ). The approach works on all systems that use a GNU ld-compatible linker.

# cat > /usr/lib64/libldap_r.so << EOF
INPUT ( libldap.so )
EOF
MacMartin
  • 1,936
  • 1
  • 21
  • 25