【问题标题】:How do I get libpq to be found by ctypes find_library?如何让 ctypes find_library 找到 libpq?
【发布时间】:2022-01-04 21:06:43
【问题描述】:

我正在 Python (3.9.9) 中构建一个简单的 DB 接口,我正在使用 psycopg (3.0.7) 连接到我的 Postgres (14.1) 数据库。直到最近,这个应用程序的开发都是在 Linux 上进行的,但现在我在 M1 Mac mini 上使用 macOS Monterey。这似乎对 psycopg 广泛使用的 ctypes 造成了一些麻烦。我得到的错误如下:

ImportError: no pq wrapper available.
Attempts made:
- couldn't import psycopg 'c' implementation: No module named 'psycopg_c'
- couldn't import psycopg 'binary' implementation: No module named 'psycopg_binary'
- couldn't import psycopg 'python' implementation: libpq library not found

基于source code of psycopg,这是 ctypes 无法使用 util.find_library libpq.dylib 的错误。 Postgres 安装为 Postgres.app,也就是说 libpq.dylib 的路径是

/Applications/Postgres.app/Contents/Versions/14/bin/lib

我尝试将它添加到 PATH,但它不起作用。然后我在 /usr/local/lib 中创建了一个指向路径的符号链接,但是(不出所料)它也不起作用。然后我做了一些挖掘,发现this issue 描述了同样的问题。我不是 macOS 专家,所以我不确定如何解释提出的一些观点。我需要将路径添加到共享缓存吗?另外,我不想分叉 Python 存储库并按照建议实现 dlopen() 方法,因为它似乎会导致其他问题。

无论如何,有没有快速绕过这个问题的解决方案?作为附加参考,产生上述错误的代码只是:

import psycopg

print(psycopg.__version__)

【问题讨论】:

  • 您可以尝试为 bin 包安装 pip install "psycopg[binary]"。否则,这个库可能不支持 m1。可能相关issue。
  • 感谢您的回答!我刚刚检查过,根据 psycopg3 的文档,M1 Macs (psycopg.org/psycopg3/docs/basic/install.html) 不支持pip install "psycopg[binary]"。

标签: python macos ctypes apple-m1 psycopg3


【解决方案1】:

问题已经通过使用 psycopg2 而不是 psycopg3 自行解决,因此似乎是后者的问题。最好知道原因以便解决它。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
【解决方案2】:

我遇到了这个问题,但 this answer to a related question 向我建议了解决方案:尝试将 envar DYLD_LIBRARY_PATH 设置为您确定的路径。

注意,为了让我自己工作,我:

  • 使用路径/Applications/Postgres.app/Contents/Versions/latest/lib 和
  • 必须安装 Python 3.9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多