关于在Docker中为python:2.7-alpine安装postgresql:psycopg2

psycopg2 installation for python:2.7-alpine in Docker

要在python中使用PostgreSql,我需要

1
pip install psycopg2

但是,它依赖于libpq-dev和python-dev。 我不知道如何在Alpine中安装依赖项? 谢谢。

这是一个Dockerfile:

1
2
3
4
FROM python:2.7-alpine

RUN apk ADD python-dev libpq-dev
RUN pip install psycopg2

输出为:

Step 3 : RUN apk add python-dev libpq-dev ---> Running in
3223b1bf7cde WARNING: Ignoring APKINDEX.167438ca.tar.gz: No such file
or directory WARNING: Ignoring APKINDEX.a2e6dac0.tar.gz: No such file
or directory ERROR: unsatisfiable constraints: libpq-dev (missing):
required by: world[libpq-dev] python-dev (missing):
required by: world[python-dev] ERROR: Service 'service' failed to build: The command '/bin/sh -c apk add python-dev libpq-dev' returned
a non-zero code: 2


如果您只需要在基于python:2.7-alpine的Docker映像上安装python 2.7的psycopg2,那么以下Dockerfile代码将非常适合您:

1
2
3
4
5
6
7
FROM python:2.7-alpine

RUN apk UPDATE && \\
    apk ADD --virtual build-deps gcc python-dev musl-dev && \\
    apk ADD postgresql-dev

RUN pip install psycopg2

编译/安装psycopg2之前的说明

libpq是PostgreSQL https://www.postgresql.org/docs/9.5/libpq.html的客户端库

postgresql-dev是带有标头的软件包,用于链接库/二进制文件中的libpq,与psycopg一样。

我在alpine 3.7中使用以下配置,我添加了一些注释来解释它。

1
2
3
4
5
6
7
8
9
10
11
12
13
# Installing client libraries AND any other package you need
RUN apk UPDATE && apk ADD libpq

# Installing build dependencies
# FOR python3 you need TO ADD python3-dev *please upvote the comment
# OF @its30 below IF you USE this*
RUN apk ADD --virtual .build-deps gcc python-dev musl-dev postgresql-dev

# Installing AND build python module
RUN pip install psycopg2

# DELETE build dependencies
RUN apk del .build-deps


我无法从python:2.7.13-alpine安装它。最终这样:

1
2
3
4
5
6
7
8
9
10
11
FROM gliderlabs/alpine:3.3

RUN apk ADD --no-cache --update \\
    python \\
    python-dev \\
    py-pip \\
    build-base

RUN apk ADD --virtual build-deps gcc python-dev musl-dev && \\
    apk ADD --no-cache --update postgresql-dev && \\
    pip install psycopg2==2.7.1

似乎您需要的软件包是libpq而不是lobpq-dev:

https://pkgs.alpinelinux.org/package/edge/main/x86/py2-psycopg2

看一下右边的依赖


在Docker的Alpine Linux下运行Python 3.7和PostgreSQL时出现问题。
本文帮助https://www.rockyourcode.com/install-psycopg2-binary-with-docker/

最主要的是在需求文件中引用psypcopg2-binary并安装以下软件包(在Dockerfile中):

1
2
3
RUN apk UPDATE && \\
apk ADD --no-cache --virtual build-deps gcc python3-dev musl-dev && \\
apk ADD postgresql-dev

帮助我的是:

1
2
3
4
5
6
7
8
9
10
11
12
RUN apk ADD --no-cache python3 \\
&& python3 -m ensurepip \\
&& pip3 install --upgrade pip setuptools \\
&& apk ADD build-base \\
&& apk ADD gcc musl-dev libffi-dev openssl-dev python3-dev \\
&& apk ADD postgresql-dev \\
&& rm -r /usr/lib/python*/ensurepip && \\
IF [ ! -e /usr/bin/pip ]; THEN ln -s pip3 /usr/bin/pip ; fi && \\
IF [[ ! -e /usr/bin/python ]]; THEN ln -sf /usr/bin/python3 /usr/bin/python; fi && \\
rm -r /root/.cache

RUN pip install --trusted-host pypi.python.org psycopg2

尤其是Docker中指示的apk add gcc musl-dev libffi-dev openssl-dev python3-dev:在高山linux发行版上安装python加密


将其添加到dockerfile

1
2
3
4
5
RUN apk UPDATE && apk ADD --no-cache --virtual .build-deps\\
    postgresql-dev gcc libpq  python3-dev musl-dev linux-headers\\
    && pip install --no-cache-dir -r requirements.txt\\
    && apk del .build-deps\\
    && rm -rf /var/cache/apk/*