Mac OS X Lion Psycopg2:未找到符号:_PQbackendPID

时间:2011-08-09 15:54:55

标签: python macos psycopg2 osx-lion

我最近升级到Mac OS X Lion,并且我试图让psycopg2再次使用python 2.6。以前网站上强制Python运行32位以上的指令(见过这里的地方:http://favosdream.blogspot.com/2009/09/make-psycopg2-and-readline-work-in-snow.html)并没有给运气好。即使尝试使用arch -i386 python将python强制为32位仍然给我错误:

symbol not found: _PQbackendPID
  Referenced from: /Library/Python/2.6/site-packages/psycopg2/_psycopg.so
  Expected in: flat namespace

4 个答案:

答案 0 :(得分:2)

我在Snow Leopard / 10.6.8上也有这个问题,并且在一份非常激烈的合同中间失去了半天。不好玩。我最终修复它a)完全删除所有postgres版本并重新启动,b)完全删除所有我的psycopg2安装(使用locate和无情),c)升级我的系统python到2.7,d)重新安装virtualenv和pip所以他们指出在正确的python版本,然后e)按照本页面上的说明,从dmg安装程序安装postgres 9.1开始:

http://hardlifeofapo.com/psycopg2-and-postgresql-9-1-on-snow-leopard/

最终这很容易:

virtualenv your_virtual_env_name
. your_virtual_env_name/bin/activate
export ARCHFLAGS="-arch i386 -arch x86_64"
export PATH=$PATH:/Library/PostgreSQL/9.1/bin
pip install psycopg2
祝你好运!

答案 1 :(得分:1)

如果您在arch -i386 python2.6中使用Apple提供的Python 2.6,您是否尝试过/usr/bin/python2.6?但是,如果您仍在运行32位版本的psycopg2和PostgreSQL客户端库,则可能是安装较新的64位或64位/ 32位通用版本的好时机。 MacPorts可以提供帮助。

答案 2 :(得分:1)

最近在尝试将psycopg2(2.8.2)导入python3(3.5.3)项目时遇到此问题。使用PostgreSQL 9.6 + pgAdmin3运行macOS Sierra(10.12.6)。

TLDR:安装SQL程序和安装程序创建的动态链接时要小心

据我所知,与psycopg2(2.8.2)兼容的libpq动态库(libpq.5.dylib)是libpq 5.9+(libpq.5.9.dylib

在安装postgres(或其他与postgres相关的程序)后,它们可能会在/usr/lib中创建到新安装的.dylib文件的动态链接,而不一定是想要。

例如,/usr/lib/libpq.5.dylib可能指向版本{5.6的./Applications/pgAdmin3.app/Contents/Frameworks/libpq.5.dylib;在这种情况下,较早版本的libpq动态库可能不包含某些功能,例如_PQsslAttribute

最适合我的解决方案:

/usr/local/lib中向上移动$PATH(因为usr/lib只能由root用户写入),然后在/usr/local/lib中创建动态链接以指向/Library/PostgreSQL/9.6/lib/libpq.5.9.dylib像这样:

cd /usr/local/lib
ln -s /Library/PostgreSQL/9.6/lib/libpq.5.9.dylib ./libpq.5.dylib

答案 3 :(得分:1)

未找到符号:_PQbackendPID 预期在:平面命名空间

我在带有 Big Sur 的 Arm64 Mac 上遇到了相同的符号错误。

我正在使用 Progressapp (x86_64) 和 psycopg2 v2.8.4 (Arm64)。由于 Progressapp Arm64 版本尚不可用,我决定检查 psycopg2 库的链接。

我的解决办法是,先卸载Progressapp, 然后导出 PATH=/opt/local/lib/postgresql13/bin:$PATH 指向 Arm64 libpq.5.13.dylib, 最后重新安装 Pogressapp。所以 psycopg2 加载了所有需要的 Arm64 库。

A4:A6