我正在尝试运行一个使用 psycopg2-binary==2.9.1 的 python 应用程序,但遇到了此错误:
psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above
当我检查安装的 libpq 版本时,它表明我有 12.8:
sudo dpkg -l | grep libpq
ii libpq5:arm64 12.8-0ubuntu0.20.04.1 arm64 PostgreSQL C client library
我四处搜索,看到一些关闭 scram 身份验证的建议,因此我在 pg_hba.conf 和 postgresql.conf 中将身份验证更改为 md5,然后重新加载配置(并重新启动我的数据库)。
我仍然遇到这个问题。有谁知道出了什么问题?预先感谢
我使用的是苹果硅(M1 Pro)。
在我的环境(docker 上的 python debian 映像)中,解决方案是升级 libpq 并安装构建工具,然后从源代码构建 psycopg2-binary。
ubuntu示例代码:
sudo apt update -y && sudo apt install -y build-essential libpq-dev
pip install psycopg2-binary --no-binary psycopg2-binary
我的arm64版本也有同样的问题。 当我基于Python3(Debian)构建Docker容器时。 如果我为arm64构建,我发现它将安装libpq版本9
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
Python 3.10.0 (default, Nov 18 2021, 00:02:14) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> print(psycopg2.__libpq_version__)
90623
>>> print(psycopg2.extensions.libpq_version())
90623
>>>
但是如果我在 amd64 CPU 上构建完全相同的 dockerfile,我会安装不同的版本。
Python 3.10.0 (default, Nov 17 2021, 15:26:39) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> print(psycopg2.__libpq_version__)
130003
>>> print(psycopg2.extensions.libpq_version())
130003
我也尝试过使用arm64的
python:3-alpine
并获得更好的结果。
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
/src # python
Python 3.10.0 (default, Nov 30 2021, 00:28:27) [GCC 10.3.1 20211027] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> print(psycopg2.__libpq_version__)
140001
>>> print(psycopg2.extensions.libpq_version())
140001
>>>
所以我猜问题出在 Debian/Ubuntu 正在使用的存储库上。 也许您应该向 Debian 和 Ubuntu 开一张票来更新适用于 arm64 的 Postgresql 客户端的软件包。
新版本的 psycopg2 现在已正确处理此问题https://github.com/psycopg/psycopg2/releases/tag/2.9.6
您的计算机上必须有 libpq 的第二个副本,并且 psycopg 正在使用该副本。识别该文件并删除或升级它。也许这需要更新 psycopg。
如果您使用 docker 来部署您的应用程序,这对我有用
# FROM pypy:3.6-7.3.3-slim
FROM python:3.10
WORKDIR /usr/src/test_repo
COPY requirements.txt requirements.txt
RUN pip install --upgrade pip && pip install -r requirements.txt
RUN apt-get autoremove -y
RUN apt-get install -y libpq-dev gcc
RUN pip install psycopg2-binary --no-binary psycopg2-binary
COPY . .
EXPOSE 5001
ENTRYPOINT ["flask","run","--host=0.0.0.0","--port=5001"]