我最近升级到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
答案 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