在Mac OS X 10.7上无法在virtualenv中使用pip安装psycopg2

War*_*ece 30 python django pip psycopg2 heroku

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

一切正常,直到我到达这一部分:

$ pip install Django psycopg2
Run Code Online (Sandbox Code Playgroud)

我可以自己安装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
Run Code Online (Sandbox Code Playgroud)

我在我的机器上安装了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
Run Code Online (Sandbox Code Playgroud)

我不太确定它意味着什么,但我注意到它中有"macosx-10.6",所以我想知道这可能是问题吗?我在10.7.

在此先感谢您的帮助.

小智 99

只是想分享.以下代码对我有用:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2==2.5.2
Run Code Online (Sandbox Code Playgroud)

我正在使用macOS Sierra和psql 9.6.1.

我从pg_config命令中获取了lib路径.

  • pg_config --ldflags将为您提供设置的特定路径。 (9认同)
  • 这是您对SO的第一个答案,效果很好。感谢您抽出宝贵的时间在这里。该解决方案可以将psycopg2安装在带有`brew`的postgres和依赖项的`virtualenv`中。 (4认同)
  • 此解决方案在Mojave 10.14.3中对我有效。谢谢! (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` (4认同)
  • 在MacOS 10.14.4和python 3.7.2和postgres 11.2上为我工作。谢谢! (2认同)

Nof*_*ofi 46

我将MAC OS CATALINA verison 10.15.5python3psql (PostgreSQL) 12.3 一起使用。这是对我有用的:

尝试使用 brew 安装 openssl

brew install openssl
Run Code Online (Sandbox Code Playgroud)

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

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
Run Code Online (Sandbox Code Playgroud)

验证这些变量已被导出echo $LDFLAGS,之后您可以通过键入来安装 psycopg2

pip3 install psycopg2
Run Code Online (Sandbox Code Playgroud)

  • LDFLAGS 环境变量对我来说已经足够了 - 我也不需要 CPPFLAGS 环境变量。 (2认同)

and*_*abs 25

首先,下载Postgres.app.

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

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
Run Code Online (Sandbox Code Playgroud)

通知:

9.3 代表版本,并将随着时间的推移而不同.


And*_*yko 12

通用 LDFLAGS 变量集

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

 LDFLAGS=`echo $(pg_config --ldflags)` pip install psycopg2
Run Code Online (Sandbox Code Playgroud)


小智 9

解决方法是 intsall 'psycopg2-binary' 包


Fel*_*Yan 6

请参阅psycopg的官方安装指南

在Mac OS X上安装作为首选,请考虑使用 Fink或MacPorts的Psycopg 打包版本

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


小智 6

安装postgresbrew:

brew install postgres
Run Code Online (Sandbox Code Playgroud)

然后,在psycopg2使用此命令的virtualenv安装中:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg2
Run Code Online (Sandbox Code Playgroud)