symbol not found: _PQbackendPID
Referenced from: /Library/Python/2.6/site-packages/psycopg2/_psycopg.so
Expected in: flat namespace
symbol not found: _PQbackendPID
Referenced from: /Library/Python/2.6/site-packages/psycopg2/_psycopg.so
Expected in: flat namespace
最近在尝试将 psycopg2(2.8.2)导入到一个使用 Python3(3.5.3)的项目中时遇到了问题。运行 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
可能只能被 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
ln -s /Applications/Postgres.app/Contents/Versions/latest/lib/libpq.5.dylib ./libpq.5.dylib
- Alex Jozbrew
将它们放回去,一切都好了。 - C--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
祝你好运!
arch -i386 python2.6
命令?但如果你仍在运行32位版本的psycopg2
和PostgreSQL客户端库,那么现在是安装更新的64位或64位/32位通用版本的好时机。MacPorts可以帮助你完成这些操作。export VERSIONER_PYTHON_VERSION=2.6
和export VERSIONER_PYTHON_PREFER_32_BIT=yes
(如果使用/usr/bin/python
)来解决问题。请参阅Apple Python手册(man python
)。但从长远来看,最好升级。 - Ned Deily/usr/bin/python
,那么上面的export
建议可能不起作用。我相信这个魔法是由苹果特殊的/usr/bin/python
程序处理的。 - Ned Deily符号未找到:_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库。
otool -E venv/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-darwin.so outputs:
/opt/local/lib/postgresql13/libpq.5.dylib (compatibility version 5.0.0, current version 5.13.0)
/opt/local/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/opt/local/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)