Fedora30下libpq.so.5与PQencryptPasswordConn RHPG_10版本兼容问题求助
你遇到的这个错误我之前也碰到过!先看一下你的错误栈:
Traceback (most recent call last):
File "server.py", line 89, in
cfg = Config(application, WSGI_PATH_PREFIX)
File "server.py", line 60, in init
self.mgrs = managers.register_managers(self.app)
File "api/managers_fourwalls.py", line 31, in register_managers
return Managers(app)
File "api/managers_fourwalls.py", line 41, in init
self.FourwallsEngine = four_walls({"posgres_db": self.DataManager.pg_connection_string})
File "api/engine/four_walls_engine.py", line 14, in init
self.engine = create_engine(self.db_string)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/init.py", line 387, in create_engine
return strategy.create(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 80, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 554, in dbapi
import psycopg2
File "/usr/lib64/python2.7/site-packages/psycopg2/init.py", line 50, in
from psycopg2._psycopg import ( # noqa
ImportError: /usr/lib64/python2.7/site-packages/psycopg2/_psycopg.so: symbol PQencryptPasswordConn version RHPG_10 not defined in file libpq.so.5 with link time reference
这个错误的核心原因是psycopg2 2.8.2和PostgreSQL 9.6版本不兼容:PQencryptPasswordConn 这个函数符号是PostgreSQL 10及以上版本的libpq.so才引入的,而你的PostgreSQL 9.6里没有这个符号,但psycopg2 2.8.2已经开始依赖它了,所以导致导入失败。
直接可行的解决方案:
- 降级psycopg2到兼容9.6的版本:
psycopg2的2.7.x系列是完全适配PostgreSQL 9.6的,你可以执行以下命令卸载当前版本并安装兼容版本:pip uninstall psycopg2 -y pip install psycopg2==2.7.7 # 2.7.x的稳定版本都可以,这个是我亲测有效的 - 验证安装是否成功:
安装完后,打开Python交互环境测试:import psycopg2 print(psycopg2.__version__) # 输出应该是2.7.7或者你安装的其他2.7.x版本
如果你之前多次安装卸载都没解决:
可能是残留了旧的库文件,建议先手动清理:
- 删除
/usr/lib64/python2.7/site-packages/psycopg2整个目录 - 再重新执行上面的安装命令
内容的提问来源于stack exchange,提问作者Joan Triay

