Reputation: 1335
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
Why is this happening?
Upvotes: 111
Views: 87156
Reputation: 862
On my scenario, it was performed on:
ProductName: macOS
ProductVersion: 12.1
BuildVersion: 21C52
brew
command:brew install openssl libpq
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib -L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include -I/opt/homebrew/opt/openssl@3/include"
psycopg2-binary
via pip3
:pip3 install psycopg2-binary
If you are wondering why it is necessary to set those specific variables, take a look in the docs of the package via brew info
command:
brew info openssl
brew info libpq
When the outcome is displayed, look for this sentence:
...
For compilers to find libpq you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
...
For compilers to find openssl@3 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
...
Thats why, when pip
is installing a package, needs a reference where to look for the libraries/compilers.
A perfect place to set this variables would be ~/.bashrc
, for future installations regarding postgres
and ssl
:
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib -L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include -I/opt/homebrew/opt/openssl@3/include"
Upvotes: 1
Reputation: 1248
For Mac OS 11.06 BigSur M1 ship, installing under a pyenv
brew reinstall libpq
brew reinstall openssl
Or install if its not already the case
brew info libpq
brew info openssl
Combine the 2 exported output logically, from
For compilers to find openssl@3 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
... export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
into
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib -L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include -I/opt/homebrew/opt/openssl@3/include"
Then you can reinstall psycopg2, forcing the recompile, otherwise you will have this problem at runtime
pip uninstall psycopg2
pip install psycopg2 --no-cache-dir
Upvotes: 12
Reputation: 345
I ran into the same error on macOS Big Sur (11.5.1) and Python 3.9.6.
It turned out, the psycopg2 (as well as pandas) versions I was using were too old. The error disappeared and pip install
started working fine after upgrading the above packages.
Ref: https://github.com/Azure/azure-cli/issues/12854#issuecomment-619213863
In general, if the solutions suggested here by others don't help, try upgrading the troubling python package.
Upvotes: 0
Reputation:
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/[email protected]/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/[email protected]/lib"
export CPPFLAGS="-I/opt/homebrew/opt/[email protected]/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).
Upvotes: 4
Reputation: 5
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
Upvotes: -4
Reputation: 9660
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).
Upvotes: 0
Reputation: 581
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"
Upvotes: 48
Reputation: 1590
I fixed it with:
brew reinstall openssl
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Upvotes: 22
Reputation: 489
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" \
brew upgrade openssl
Then I could install psycopg2
Upvotes: 1
Reputation: 789
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.
Upvotes: 13
Reputation: 2210
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.
Upvotes: 1
Reputation: 760
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.
Upvotes: 2
Reputation: 71
Install/update Xcode developer tools
xcode-select --install
Query postgres path
find / -name pg_config 2>/dev/null
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
Upvotes: 7
Reputation: 3592
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
Upvotes: 353
Reputation: 87074
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.
Upvotes: 2