在外部 Docker 图像中构建 python 的 gevent

Build python's gevent in outer Docker image

这个docker文件显然不起作用:

FROM python:3.7.0-alpine

RUN pip install gevent

因为alpine中没有编译器。

是否可以将其安装在不同的 docker 映像中,然后将其复制到我的映像中?

换句话说,我可以通过用某些东西替换 <???> 来实现吗?

FROM python:3.7.0-streach as base

RUN pip install gevent

FROM python:3.7.0-alpine

COPY --from=base <???>

Alpine Linux 具有 build-base,它提供了一种安装编译器和其他构建工具的便捷方式。您还需要安装 libffi-dev 和其他提供 headers 的软件包。

您打算将 gevent 从 Debian-based 容器复制到 Alpine-based 容器的方法将不起作用,因为后者使用 musl,而不是 libc.查看 apk--virtual 选项以轻松 un-/install 构建依赖项。

据我所知,由于 ABI 更改 gevent(或它的某些版本)不针对 CPython 3.7(目前)进行编译。

对于一年后发现这个问题的人来说,这应该有效:

FROM python:3.7.0-stretch as base

RUN apk add build-base
RUN mkdir /install
RUN pip install --install-option="--prefix=/install" gevent

FROM python:3.7.0-alpine

COPY --from=base /install /usr/local