无法在Mac OS X 10.7的虚拟环境中使用pip安装psycopg2

74

我正在按照Heroku的教程部署Django应用程序:http://devcenter.heroku.com/articles/django#prerequisites

一切都很顺利,直到我遇到了这个部分:

$ pip install Django psycopg2

我可以单独安装Django,但是问题出在psycopg2上。

我一直收到这个错误:

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

我已在我的计算机上安装了PostgreSQL 9.1。
另外,在输出中,有很多这样的行:
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

我不太确定它的含义,但我注意到其中有"macosx-10.6",所以我想知道是否可能是问题的原因?我使用的是10.7。

提前感谢你的帮助。


这对我有用:https://dev59.com/s6nka4cB1Zd3GeqPNmnY - Angelo Ortega
在运行了 brew install postgres 之后,我能够顺利地运行 pip install psycopg2,没有任何问题。 - Jeff Gruenbaum
14个回答

183

我想分享一下。以下代码适用于我:

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

我正在使用macOS Sierra和psql 9.6.1。

我从pg_config命令中获取了库路径。


7
这是你在SO上的第一个答案,它很有效。感谢你抽出时间将其发布在这里。这个解决方案适用于在已安装brew的环境下使用virtualenv安装带有Postgres和依赖项的psycopg2。 - Jorge Leitao
24
运行pg_config --ldflags命令可以获取你的设置中特定的路径。 - numbers are fun
2
在我的macOS 10.14.4上,使用Python 3.7.2和Postgres 11.2可以正常工作。谢谢! - Tim
4
这个解决方案对我在Mojave 10.14.3上起作用。谢谢! - Sam
4
在最新的MAC OS X版本(v10.15.4)上,使用最新版本的psycopg2(2.8.4),可以通过以下命令安装:env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip install psycopg2==2.8.4。请注意,此命令将在安装时链接所需的库。 - vincedgy
显示剩余5条评论

58

我正在使用MAC OS CATALINA版本10.15.5,并使用python3psql (PostgreSQL) 12.3。这是对我有效的方法:

尝试使用brew安装openssl。

brew install openssl

然后在终端中导出这些变量。

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

确认这些变量已通过echo $LDFLAGS导出,之后您可以通过输入以下内容顺利安装psycopg2:

pip3 install psycopg2

2
LDFLAGS 环境变量已经足够了,我不需要 CPPFLAGS。 - Nick ODell

35

首先,下载Postgres.app

然后,在运行pip install psycopg2之前,请将二进制文件放在您的路径中:

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

注意

9.3 代表版本号并会随时间变化而不同。


谢谢,我觉得这个回复非常有用,因为它不需要使用MacPorts或其他工具。 - goetz
谢谢,这对我有用。供那些可能需要的人参考:macOS 10.15,2020年英特尔MacBook Pro。Postgres 14。 - user2991036

17

通用的LDFLAGS变量设置

在安装前导出LDFLAGS,以下是通用命令,适用于OS X(我相信任何有相同错误的Linux系统):

 LDFLAGS="$(pg_config --ldflags)" pip install psycopg2

这样做更好,因为它适用于安装在不同路径下的 OpenSSL。 - halil

9
请参考psycopg的官方安装指南

在Mac OS X上安装Psycopg,首先请考虑使用Fink或MacPorts提供的预打包版本

如果您仍然想从源代码构建Psycopg,请查看这些文章


好的,我刚刚在虚拟环境中使用macports安装了psycopg2。我猜这个步骤跟教程中的pip install命令是一样的?也就是说,我只需要替换这个步骤就行了?我问这个问题的原因是因为当我启动应用程序时,它还是无法正常运行。当我输入Heroku Logs时,其中一行显示:raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e) - WarAndPiece
使用MacPorts安装无法在virtualenv环境中工作。为了使您的应用程序正常工作,您应该查看有关从源代码构建的文章 :) - Felix Yan
好的,我按照这些文章中的指示进行了操作:http://blog.timc3.com/2010/08/20/psycopg2-os-x-_pqbackendpid/,并成功在我的机器上安装了psycopg2。然而,在虚拟环境中仍然遇到相同的错误。我不太确定如何在虚拟环境中从源代码构建。 - WarAndPiece
在运行最后一个命令 python setup.py install 之前,你是否激活了你的虚拟环境? - Felix Yan
1
成功了!谢谢!对于那些想知道更详细过程的人,我重新创建了hellodjango目录并按照步骤进行操作,而不是使用'pip install psycopg2',我只是下载了psycopg2-2.4.4.tar.gz并使用“python setup.py install”进行安装。 - WarAndPiece
Fink!MacPorts!Retro!:) - jtlz2

9
解决方法是安装“psycopg2-binary”包。

7

使用 brew 安装 postgres:

brew install postgres

然后,在您的虚拟环境中使用以下命令安装psycopg2
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2

这些命令运行得很好,但是Python仍然找不到 psycopg2。然后我不得不运行 pip install psycopg2-binary,最终它起作用了。这里可能有一些冗余操作,但我不在乎。它终于可以工作了。 - defraggled

2

我尝试了很多方法,但都没有成功。然而,如果你在Mojave上使用Xcode CLI工具,并且在安装psycopg2时遇到问题,请尝试以下命令,然后再次尝试安装psycopg2。

原始答案: Original Answer

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

这被描述为Mojave问题:Pillowissue。在我这种情况下,这解决了问题。最初的回答。

1
对我来说很有效,我在虚拟环境之外运行了该命令,再次激活环境,然后顺利安装。 - Maor

2

试试这个:

pip install psycopg2-binary

2

针对这一行进行重点关注: ld: library not found for -lpq

像大多数第三方的postgres库一样,psycopg2需要在您的路径中可用'pg_config'。我猜测这就是你的问题所在。

在命令提示符下键入'pg_config'。希望您能看到它找不到。如果没有,请执行以下操作:

sudo find / -name pg_config

查找其位置并将该位置添加到您的路径中,运行'pg_config'并确保它成功,最后重新运行pip。

find命令从您的根目录开始搜索;这可能需要几分钟


2
嘿,谢谢你的回复。但是,当我输入“pg_config”时,它可以被找到且没有问题。 - WarAndPiece

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接