Python psycopg2 SCRAM 身份验证

问题描述 投票:0回答:5

我正在尝试运行一个使用 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,然后重新加载配置(并重新启动我的数据库)。

我仍然遇到这个问题。有谁知道出了什么问题?预先感谢

python postgresql psycopg2
5个回答
11
投票

我使用的是苹果硅(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

5
投票

我的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 客户端的软件包。


4
投票

新版本的 psycopg2 现在已正确处理此问题https://github.com/psycopg/psycopg2/releases/tag/2.9.6


0
投票

您的计算机上必须有 libpq 的第二个副本,并且 psycopg 正在使用该副本。识别该文件并删除或升级它。也许这需要更新 psycopg。


0
投票

如果您使用 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"]
© www.soinside.com 2019 - 2024. All rights reserved.