【问题标题】:Install psycopg2 on pypy3 docker image在 pypy3 docker 镜像上安装 psycopg2
【发布时间】:2021-11-23 07:55:18
【问题描述】:

我非常努力地在 pypy3 docker image https://hub.docker.com/_/pypy 上安装 psycopg2

事实证明这是不可能的......

FROM pypy:3
WORKDIR /
COPY . .
RUN apt-get update
RUN apt-get install libpq-dev gcc
RUN apt-get -y install python3-dev
RUN apt-get -y install postgresql
RUN apt-get -y install gcc
RUN pypy3 -m pip install --upgrade pip
RUN pypy3 -mpip install psycopg2            <-- Blow up here
RUN pypy3 -mpip install -r requirements.txt
ENV PATH /opt/conda/bin:$PATH
ENV PYTHONPATH "${PYTHONPATH}:/src"
ENTRYPOINT ["pypy3", "xxx.py"]

错误信息是:

api_gateway_1         |   File "/opt/pypy/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 793, in dbapi
api_gateway_1         |     import psycopg2
api_gateway_1         | ModuleNotFoundError: No module named 'psycopg2'

esql -I/usr/include/postgresql/13/server -I/usr/include/libxml2 -c psycopg/typecast.c -o build/temp.linux-x86_64-3.7/psycopg/typecast.o -Wdeclaration-after-statement
#8 1044.6     In file included from psycopg/typecast.c:168:
#8 1044.6     ./psycopg/typecast_datetime.c: In function ‘_parse_inftz’:
#8 1044.6     ./psycopg/typecast_datetime.c:116:14: error: ‘PyDateTime_TimeZone_UTC’ undeclared (first use in this function); did you mean ‘PyDateTime_Time’?
#8 1044.6       116 |     tzinfo = PyDateTime_TimeZone_UTC;
#8 1044.6           |              ^~~~~~~~~~~~~~~~~~~~~~~
#8 1044.6           |              PyDateTime_Time
#8 1044.6     ./psycopg/typecast_datetime.c:116:14: note: each undeclared identifier is reported only once for each function it appears in
#8 1044.6     error: command 'gcc' failed with exit status 1

我尝试了不同的方法,但都没有奏效。 https://blog.csdn.net/cdnight/article/details/52536451 https://cloud.tencent.com/developer/ask/119621 Installing psycopg2 command 'gcc' failed with exit status 1

最后,我(不情愿地)通过切换到 anaconda 作为基础映像来管理:

FROM continuumio/anaconda3
WORKDIR /
COPY . .
RUN apt-get update
RUN apt-get -y install libpq-dev gcc
RUN apt-get -y install python3-dev
RUN apt-get -y install postgresql
RUN apt-get -y install gcc
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV PATH /opt/conda/bin:$PATH
ENV PYTHONPATH "${PYTHONPATH}:/src"
ENTRYPOINT ["python", "xxx.py"]

注意,这些在 dockerfile 中:

RUN apt-get -y install libpq-dev gcc
RUN apt-get -y install python3-dev
RUN apt-get -y install postgresql
RUN apt-get -y install gcc

都是针对sqlalchemy,依赖psycopg2,依赖configparser:

configparser
psycopg2
sqlalchemy

成功了。但我真的很想要pypy3。

【问题讨论】:

    标签: python-3.x sqlalchemy psycopg2 pypy


    【解决方案1】:

    据我所知,psycopg2 与 PyPy 不兼容。你可能想试试https://pypi.org/project/psycopg2cffi/

    【讨论】:

    • 谢谢阿明。下面的mattip好像提示最新的pypy3.7-v7.3.5或者以上可以做到?
    • 不,他说需要 v7.3.6。无论如何,出于性能原因,他还推荐 psycopg2cffi。
    【解决方案2】:

    该 docker 映像使用 PyPy3.7-v7.3.5,您至少需要 v7.3.6 才能使用 pycopg2。您可以向 docker source repo 提出问题,该问题不由 PyPy 团队维护。您可能想使用 cffi 变体,因为它应该更快。我建议你使用 conda 打包的 PyPy3.7,它已经有用于 psycopy2 和许多其他包的二进制包,用于 linux 和 windows

    conda create -n pypy37 pypy
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2020-01-25
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多