Can't install psycopg2 with pip in virtualenv on Mac OS X 10.7
Question:
I am following Heroku’s tutorial to deploy a Django app: http://devcenter.heroku.com/articles/django#prerequisites.
Everything is working fine until I get to this part:
$ pip install Django psycopg2
I can install Django by itself, but the probelm is with psycopg2.
I keep getting this error:
ld: library not found for -lpq
collect2: ld returned 1 exit status
ld: library not found for -lpq
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/_4/p6l0y0t51hd4xbq7llbyshmw0000gn/T//cc0L10mI.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1
I’ve installed PostgreSQL 9.1 on my machine.
Also, in the output, there are bunch of lines like this:
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.4.4 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x090004 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I. -I/usr/include -I/usr/include/postgresql/server -c psycopg/typecast.c -o build/temp.macosx-10.6-intel-2.7/psycopg/typecast.o
I’m not really sure what it means, but I do notice that it has “macosx-10.6” in it so I’m wondering if that could be the issue? I’m on 10.7.
Thanks in advance for your help.
Answers:
Focusing on this line: ld: library not found for -lpq
psycopg2, like most 3rd-party postgres libraries, wants ‘pg_config’ available in your path. I’m guessing that’s your problem.
Type ‘pg_config’ at the command prompt. I hope you see that it’s not found. If not, do a:
sudo find / -name pg_config
to find where it’s at, and then add that location to your path, run ‘pg_config’ and see it succeed, and then finally, re-run pip.
the find command is searching starting at your root dir; it will take a few minutes.
Refer to official installation guide of psycopg:
Installing on Mac OS X As a first option, please consider using a
packaged version of Psycopg from Fink or MacPorts.
If you still want to build Psycopg from source, take a look at these
articles.
The following post helped me get it working:
https://stackoverflow.com/a/10326004/1361851
Had to install “command line tools” for Xcode and then I was able to pip install with the virtualenv just the same as the heroku tutorial.
First, download Postgres.app
.
Then, before running pip install psycopg2
, put the binary in your path:
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
NOTICE:
9.3
stands for version and will differ over time.
Install postgres
with brew
:
brew install postgres
Then, in your virtualenv install psycopg2
with this command:
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Just would like to share. The following code worked for me:
env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2==2.5.2
I am using macOS Sierra and psql 9.6.1.
I got the lib path from the pg_config
command.
I tried all of the above solutions but the only thing that resolved the issue for me is simply updating Xcode CLI utilities through the official App Store.
The workaround is to intsall ‘psycopg2-binary’ package
I was trying so many things and nothing worked. However, if you use Xcode CLI Tools on Mojave and have a problem installing psycopg2, try the following command and try to install psycopg2 again.
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
This was described as a Mojave Issue: Pillowissue
In my case, this solved the issue.
Once I was also facing the same problem on Mac then I figured out that psycopg2 has a dependency on GCC library.
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
Just run this command and then try to run
pip install psycopg2
Hope this will work.
Generic LDFLAGS variable set
Just export LDFLAGS before installing it, here is generic command which shall work for OS X (and I believe any LINUX system which has same error):
LDFLAGS="$(pg_config --ldflags)" pip install psycopg2
I am using MAC OS CATALINA verison 10.15.5 with python3 and psql (PostgreSQL) 12.3. Here is what worked for me:
Try installing openssl using brew
brew install openssl
after that export these variables in the terminal.
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
verify these variables have been exported by echo $LDFLAGS
and after that you are good to go with installation of psycopg2 by typing
pip3 install psycopg2
Try this:
pip install psycopg2-binary
First this:
pip install psycopg2-binary
and then:
pip install psycopg2
worked.
I am following Heroku’s tutorial to deploy a Django app: http://devcenter.heroku.com/articles/django#prerequisites.
Everything is working fine until I get to this part:
$ pip install Django psycopg2
I can install Django by itself, but the probelm is with psycopg2.
I keep getting this error:
ld: library not found for -lpq
collect2: ld returned 1 exit status
ld: library not found for -lpq
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/_4/p6l0y0t51hd4xbq7llbyshmw0000gn/T//cc0L10mI.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1
I’ve installed PostgreSQL 9.1 on my machine.
Also, in the output, there are bunch of lines like this:
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.4.4 (dt dec pq3 ext)" -DPG_VERSION_HEX=0x090004 -DPSYCOPG_EXTENSIONS=1 -DPSYCOPG_NEW_BOOLEAN=1 -DHAVE_PQFREEMEM=1 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I. -I/usr/include -I/usr/include/postgresql/server -c psycopg/typecast.c -o build/temp.macosx-10.6-intel-2.7/psycopg/typecast.o
I’m not really sure what it means, but I do notice that it has “macosx-10.6” in it so I’m wondering if that could be the issue? I’m on 10.7.
Thanks in advance for your help.
Focusing on this line: ld: library not found for -lpq
psycopg2, like most 3rd-party postgres libraries, wants ‘pg_config’ available in your path. I’m guessing that’s your problem.
Type ‘pg_config’ at the command prompt. I hope you see that it’s not found. If not, do a:
sudo find / -name pg_config
to find where it’s at, and then add that location to your path, run ‘pg_config’ and see it succeed, and then finally, re-run pip.
the find command is searching starting at your root dir; it will take a few minutes.
Refer to official installation guide of psycopg:
Installing on Mac OS X As a first option, please consider using a
packaged version of Psycopg from Fink or MacPorts.If you still want to build Psycopg from source, take a look at these
articles.
The following post helped me get it working:
https://stackoverflow.com/a/10326004/1361851
Had to install “command line tools” for Xcode and then I was able to pip install with the virtualenv just the same as the heroku tutorial.
First, download Postgres.app
.
Then, before running pip install psycopg2
, put the binary in your path:
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
NOTICE:
9.3
stands for version and will differ over time.
Install postgres
with brew
:
brew install postgres
Then, in your virtualenv install psycopg2
with this command:
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Just would like to share. The following code worked for me:
env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2==2.5.2
I am using macOS Sierra and psql 9.6.1.
I got the lib path from the pg_config
command.
I tried all of the above solutions but the only thing that resolved the issue for me is simply updating Xcode CLI utilities through the official App Store.
The workaround is to intsall ‘psycopg2-binary’ package
I was trying so many things and nothing worked. However, if you use Xcode CLI Tools on Mojave and have a problem installing psycopg2, try the following command and try to install psycopg2 again.
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
This was described as a Mojave Issue: Pillowissue
In my case, this solved the issue.
Once I was also facing the same problem on Mac then I figured out that psycopg2 has a dependency on GCC library.
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
Just run this command and then try to run
pip install psycopg2
Hope this will work.
Generic LDFLAGS variable set
Just export LDFLAGS before installing it, here is generic command which shall work for OS X (and I believe any LINUX system which has same error):
LDFLAGS="$(pg_config --ldflags)" pip install psycopg2
I am using MAC OS CATALINA verison 10.15.5 with python3 and psql (PostgreSQL) 12.3. Here is what worked for me:
Try installing openssl using brew
brew install openssl
after that export these variables in the terminal.
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
verify these variables have been exported by echo $LDFLAGS
and after that you are good to go with installation of psycopg2 by typing
pip3 install psycopg2
Try this:
pip install psycopg2-binary
First this:
pip install psycopg2-binary
and then:
pip install psycopg2
worked.