Visual Studio ImportError:dlopen(...):未找到符号:_PQ加密密码连接

7tofc5zh  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(105)

我在这个问题上已经纠结了一段时间了。在我的Mac上安装了psycpg 2之后,我让一个朋友帮我安装了它:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip3 install psycopg2

然后我导入了psycopg 2
我试着运行我的db程序,得到了这个错误:

Traceback (most recent call last):
  File "postgresdemo.py", line 1, in <module>
    import psycopg2 
  File "/Users/nkosana/Library/Python/3.7/lib/python/site-packages/psycopg2/__init__.py", line 51, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: dlopen(/Users/nkosana/Library/Python/3.7/lib/python/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so, 2): Symbol not found: _PQencryptPasswordConn
  Referenced from: /Users/nkosana/Library/Python/3.7/lib/python/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
  Expected in: /usr/lib/libpq.5.dylib in /Users/nkosana/Library/Python/3.7/lib/python/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so

系统及版本

MacOS Catalina (10.15.4)
psycopg2-2.8.5
简体中文
我将非常感谢你的帮助,先谢谢你。

jgovgodb

jgovgodb1#

我遇到了和你一样的问题:

Symbol not found: _PQencryptPasswordConn
  Referenced from: /Users/Lynda/pgproject/pgprojectenv/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so
  Expected in: /usr/lib/libpq.5.dylib

对我有用的是将/usr/local/lib添加到PATH中,并创建一个从我的PostgreSQL/lib到/usr/local/lib的符号链接

cd /usr/local/lib
ln -s /Users/Lynda/PostgreSQL/lib/libpq.5.12.dylib ./libpq.5.dylib

有一个解决这个库错误的答案,并且更好地解释了为什么会发生这种情况以及如何在这里修复它Mac OS X Lion Psycopg2: Symbol not found: _PQbackendPID

8xiog9wr

8xiog9wr2#

pip uninstall psycopg2
pip install psycopg2

here的,为我工作。macOS Catalina 版本10.15.7。简体中文

xa9qqrwz

xa9qqrwz3#

bgar2021提出的ln -s解决方案无法工作,因为OP案例中的.dylib文件应该在/usr/lib中,而不是/usr/local/lib中,并且由于SIP保护,您无法更改/usr/lib中的.dylib链接或文件(并且绝对不建议禁用SIP保护)。
在OP的情况下,内置的MacOS install_name_tool命令应该可以工作,这也是因为.so文件已经使用venv放入了项目文件夹中。
我建议您使用venv,这样您就可以在project文件夹中拥有.so的本地版本,这样修改起来更安全。如果您这样做,您可以通过使用MacOS中的内置install_name_tool来告诉.so文件应该使用正确的.dylib文件来轻松解决这个问题。
此时,您可以使用venv``中的pip tool`在项目文件夹中安装更新版本的postgres,例如postgresql@14

pip install postgresql@14

因此,你可以通过这样做来解决:

install_name_tool -change '/usr/lib/libpq.5.dylib' '/usr/local/Cellar/postgresql@14/14.8/lib/postgresql@14/libpq.5.14.dylib' '/Users/nkosana/yourproject/venv/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-darwin.so'

请替换假名(例如“yourproject”)与您选择的名称和双重检查,因为我可能犯了错别字。
希望这能帮上忙。

相关问题