繁体   English   中英

psycopg2 导入错误 SSL_check_private_key:找不到符号

[英]psycopg2 import error SSL_check_private_key: symbol not found

我正在使用 Docker 和psycopg2来连接我的 docker-compose 中的另一个数据库服务。 但是,psycopg2 出现导入错误:

Python 3.8.2 (default, Feb 29 2020, 17:03:31)
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/site-packages/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: Error relocating /usr/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-x86_64-linux-gnu.so: SSL_check_private_key: symbol not found

这是我的 Dockerfile,我试图将psycopg2用于:

FROM osgeo/gdal:alpine-normal-latest

ENV PYTHONUNBUFFERED 1

RUN apk update && apk add \
    --virtual build-deps gcc python-dev musl-dev \
    postgresql-dev \
    libpq \
    python3-dev \
    curl \
    libffi-dev

ADD . /app
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install --no-cache-dir -r requirements.txt

CMD ["sh", "./entry.sh"]

我发现丢失的符号应该从libssl.so加载。 此库未加载,因为psycopg2未将其声明为依赖项。 我们可以使用LD_PRELOAD环境变量强制 python 加载它。

就我而言, libssl.so位于/lib/libssl.so.1.1因此我可以将其用作解决方法:

/sunstrider # LD_PRELOAD=/lib/libssl.so.1.1 python3 manage.py shell
Python 3.8.5 (default, Jul 20 2020, 23:11:29) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import psycopg2
>>>

问题似乎是最近的 alpine 图像没有自动安装 openssl。 我在基于 alpine 的自定义构建 Docker 映像中遇到了同样的问题,并通过在构建/安装我们的 Python 依赖项之前安装 openssl 包来修复它。

我使用的 docker 映像似乎存在问题。 我最终使用了thinkwhere/gdal-python:3.7-shippable并且我能够毫无问题地导入 psycopg2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM