加载 psycopg2 模块时出错:未加载库:libpq.5.dylib

kok*_*rek 18 django postgresql dlopen libpq apple-m1

我正在尝试使用 Postgres 数据库运行 Django 项目。我使用通过 postgressapp 安装的 Postgres 13.4(具有所有当前支持的版本的通用版本)和 python 3.9(在 venv 中)。我在配备 Apple M1 芯片的 Mac、macOS Big Sur 上工作。

\n

我遇到了以下众所周知的问题:

\n
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/mymac/PyCharmProjects/projectname/venv/lib/python3.9/site-packages/psycopg2/_psycopg.cpython-39-darwin.so, 2): Library not loaded: /opt/homebrew/opt/postgresql/lib/libpq.5.dylib\n\xc2\xa0 Referenced from: /Users/mymac/PyCharmProjects/projectname/venv/lib/python3.9/site-packages/psycopg2/_psycopg.cpython-39-darwin.so\n\xc2\xa0 Reason: image not found\n
Run Code Online (Sandbox Code Playgroud)\n

通过搜索,我发现了一些这样的讨论:https://github.com/psycopg/psycopg2/issues/1216。看来最相关的解决方案是“RyanDurk\xc2\xa0commented\xc2\xa0on Jan 27”:

\n
$ brew install libpq --build-from-source\n\n$ export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"\n\n$ pip install psycopg2\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,就我而言,它没有帮助。

\n

然后,我在这里找到了一些建议:Library not returned: /usr/local/lib/libpq.5.4.dylib并尝试了它们。特别是,我尝试通过符号链接访问 libpq.5.dylib,例如:\nln -s\xc2\xa0 /Library/PostgreSQL/13/lib/libpq.5.dylib /opt/homebrew/opt/postgresql/lib/libpq.5.dylib(该解决方案标记为主题启动器接受),但也没有成功。

\n

我尝试从 postgresql.org 安装 postgres,然后使用 homebrew 卸载/重新安装 postgres,然后

\n
gem uninstall pg -> bundle install\n
Run Code Online (Sandbox Code Playgroud)\n

得到相同的结果。

\n

我之前在使用 Intel 芯片和 PyCharm 社区版的 mac 上成功运行过相同的项目。同样的项目在Linux上也可以正常运行。

\n

如果您知道发生了什么以及如何解决此问题,请帮助我。如有必要,我会提供更多详细信息。

\n

ale*_*cxe 31

postgresql在brew决定将我的包升级到版本14(您的版本可能有所不同)后,我遇到了同样的错误。

错误消息中有这一部分:

Library not loaded: '/usr/local/opt/postgresql/lib/libpq.5.dylib'
...
Reason: tried: '/usr/local/opt/postgresql/lib/libpq.5.dylib' (no such file)
Run Code Online (Sandbox Code Playgroud)

我基本上找到了 的新位置并将其符号链接到正在寻找它的libpq位置:psycopg2

ln -s /usr/local/lib/postgresql@14/libpq.5.14.dylib /usr/local/opt/postgresql/lib/libpq.5.dylib
Run Code Online (Sandbox Code Playgroud)

希望能帮助其他遇到类似问题的人。

  • 在 Apple Silicon 上,Homebrew 安装前缀已更改。这应该适用于 Intel 和 M1: `ln -s $(brew --prefix)/lib/postgresql@14/libpq.5.14.dylib $(brew --prefix)/opt/postgresql/lib/libpq.5.dylib ` (23认同)