90

I am working on a project for one of my lectures and I need to download the package psycopg2 in order to work with the postgresql database in use. Unfortunately, when I try to pip install psycopg2 the following error pops up:

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1

Does anyone know why this is happening? Is it because Sierra has not supported some packages? Thanks in advance!

Jome
  • 1,075
  • 1
  • 9
  • 19

16 Answers16

333

I fixed this by installing Command Line Tools

xcode-select --install

then installing openssl via Homebrew and manually linking my homebrew-installed openssl to pip:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

on macOS Sierra 10.12.1

zganger
  • 3,392
  • 1
  • 7
  • 10
56

Try installing it with:

pip install psycopg2-binary
double-beep
  • 3,889
  • 12
  • 24
  • 35
Dheeraj Pande
  • 810
  • 7
  • 16
26
brew install postgresql

If postgresql exist then run:

brew upgrade postgresql
sudo pip install psycopg2

In venv:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip install psycopg2==2.8.4

If you need use only the command pip install psycopg2 export the path in macOSX:

export LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib"
Boken
  • 3,207
  • 9
  • 25
  • 31
Ion Gorincioi
  • 361
  • 3
  • 4
  • 2
    This worked perfectly for me, using brew install and then type in the "env =" in my terminal. However this is complete dark magic, can anyone explain why this was necessary and what it actually did? Thanks! For information, in May 2020 the mac version is Catalina. – Seb May 13 '20 at 11:41
18

I fixed it with:

brew reinstall openssl
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Apurva jain
  • 1,068
  • 10
  • 14
  • 2
    This worked for me as well, on Catalina. I'm using Python version 3.8.2, where I have `pyenv` managing my Python environments and installations. Your solution worked from me, but I executed: `$ python -m pip install psycopg2` instead of how others used `$ pip install psycopg2`, which we might not know which interpreter we are using and installing. This will ensure pip we will be using and installing with my default python interpreter, which is version 3.8.2 for me. – Angelito Jul 05 '20 at 08:50
  • 1
    Worked for me too – Greg Eremeev Aug 31 '20 at 12:51
  • That export will need be added to my .bashrc forever? – Rafael Gomes Francisco Sep 25 '20 at 16:37
13

Running into a similar problem using pipenv install psycopg2:

ld: library not found for -lssl', ' clang: error: linker command failed with exit code 1 (use -v to see invocation)', " error: command 'clang' failed with exit status 1", '
----------------------------------------',

I tried all of the recommendations above and none of them worked. I'd faced this problem in another virtualenv a few months ago and remembered reading something about this being a psycopg2 version issue. So I tried installing with 2.7.1 and 2.8.3 and both still failed. Somehow version 2.7.7 worked:

pipenv install psycopg2==2.7.7

Wish I had time to look into this further to understand what's really happening. But for now I don't and this worked.

Paul Meinshausen
  • 579
  • 1
  • 5
  • 11
7
  1. Install/update Xcode developer tools

    xcode-select --install
    
  2. Query postgres path

    find / -name pg_config  2>/dev/null
    
  3. Install psycopg2, use the path you got in step 2. Mine was '/usr/local/Cellar/postgresql/9.5.0/bin/pg_config'

    PATH=$PATH:/usr/local/Cellar/postgresql/9.5.0/bin/ pip install psycopg2
    
einmuya
  • 71
  • 3
2

This works for me (on a terminal):

find / -name pg_config  2>/dev/null

then add the path:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.5/bin/

os version: MacOs Sierra

I hope this helps.

Lex Bryan
  • 583
  • 6
  • 13
  • 2
    This assumes you have installed Postgres.app on your mac and not using mac ports, home brew, the EnterpriseDB installer or another way of packaging/installing your postgresql server on your mac, yes? – scot Feb 27 '17 at 11:19
  • Oh also the original question was about missing -lssl library and then "clang", but not the pg_config tool. Clang is in Xcode, the other thing is in the openssl library. user @zganger has the right answer to this question. (I got here looking for the pg_config issue, so your answer helped me a ton, but it's not what the question asked). – scot Feb 27 '17 at 11:23
2

Well, tons of different options didn't work for me, but finally!

First, try this:

brew reinstall openssl

At the end of the reinstallation process you will get basically the following lines within Caveats section, which I've put in the zshrc config file since I use macOS Big Sur (version 11.1) and zsh terminal.

Open zshrc or other config file specific to your system:

nano ~/.zshrc

Paste the following lines at the end (or change these commands accordingly to the Caveats you've got), just keep in mind that OpenSSL provided by Homebrew might conflict with the system's one (I've got a warning that macOS provides LibreSSL) but it worked well anyway:

export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

Save the file and exit by pressing ^X and confirming with Yes.

Hopefully you can now install psycopg2:

pip3 install psycopg2-binary

I'm still not sure what was the root cause of the problem, it just appeared suddenly when I tried to reinstall pipenv for my project (maybe some recent system updates).

spyker77
  • 43
  • 6
1

It looks like the openssl package is not installed. Try installing it and pip install again. I'm not a macos user, but I believe that brew simplifies package management on that platform.

You might also need to install the Python development and postgresql development packages.

mhawke
  • 75,264
  • 8
  • 92
  • 125
1

Old, but for folks using pipenv, I resolved this issue by looking at my dependency graph pipenv graph --reverse and noticing it required psycopg2-binary==2.8.2. Running pipenv install psycopg2-binary resolved the issue.

laaksom
  • 1,512
  • 1
  • 17
  • 16
1
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" \
brew upgrade openssl

Then I could install psycopg2

Sergey Lukin
  • 393
  • 1
  • 14
1

try this -->pip install psycopg2-binary

Amit Tiwari
  • 45
  • 1
  • 3
  • Welcome to Stack Overflow! Please note you are answering a very old and already answered question. Here is a guide on [How to Answer](http://stackoverflow.com/help/how-to-answer). – help-info.de Aug 10 '20 at 07:54
0

In case you don't want to faff around with brew, here's the "MacOS-only solution":

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

After this, pip will gladly install psycopg2 from the source. Works with "Mojave" (macOS 10.14).

Laryx Decidua
  • 6,395
  • 4
  • 36
  • 36
0

The only thing that worked for me was:

pip install psycopg2==2.7.7
Clau
  • 11
  • 1
0

Try installing: pip install psycopg2-binary it works

N N K Teja
  • 49
  • 7
-4

As per current/todey condition - only solution for this is - uninstall your python 3.8 or 3.9 or so on and install ptyhon 3.7.4

  • Given this question was asked in 2016, I doubt very much that "uninstall Python 3.8/3.9 and install Python 3.7" is a solution to the OP's problem – David Buck May 23 '20 at 14:20
  • This is so wrong. I ran @Apurva's answer and it worked for me. I'm using Catalina, and I have multiple Python versions. https://stackoverflow.com/a/58722268/3255762 – Angelito Jul 05 '20 at 08:57