Mac OS X Lion Psycopg2: 找不到符号 _PQbackendPID
我最近升级到了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 个回答
如果你在使用苹果自带的 Python 2.6,路径是 /usr/bin/python2.6
,你试过用 arch -i386 python2.6
吗?不过,如果你还在用 32 位的 psycopg2
和 PostgreSQL 客户端库,那么现在可能是时候安装更新的 64 位版本或者同时支持 64 位和 32 位的通用版本了。可以用 MacPorts 来帮你解决这个问题。
我在使用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
祝你好运!
最近我在一个使用Python 3(3.5.3)项目中尝试导入psycopg2(2.8.2)时遇到了问题。我使用的是macOS Sierra(10.12.6),并且安装了PostgreSQL 9.6和pgAdmin3。
总结一下:安装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
可能指向./Applications/pgAdmin3.app/Contents/Frameworks/libpq.5.dylib
,而这个版本是5.6;而旧版本的libpq动态库可能缺少一些功能,比如_PQsslAttribute
。
对我有效的解决方案:
把/usr/local/lib
放到$PATH
的前面(因为/usr/lib
可能只能由管理员写入),然后在/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