解决 Docker 中的 pipenv 安装 weasyprint 错误

resolve pipenv install weasyprint error in Docker

我在 Docker 设置中使用 Alpine linux。 这是 Docker 文件。

# pull official base image
FROM python:3.7.4-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apk --update --upgrade --no-cache add cairo-dev pango-dev gdk-pixbuf


RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev jpeg-dev zlib-dev libffi-dev\
    && apk add postgresql \
    && apk add postgresql-dev \
    && pip install psycopg2 \
    && apk add jpeg-dev zlib-dev libjpeg \
    && pip install Pillow \
    && apk del build-deps

# install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
COPY ./Pipfile /usr/src/app/Pipfile
RUN pipenv install --skip-lock --system --dev

# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh

# copy project
COPY . /usr/src/app/

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

这会导致 cairocffi 安装停滞并出现

错误

无法执行'gcc': 没有那个文件或目录。

我发现 this link 但是,建议添加以下行:

RUN apk add --update python python-dev py-pip build-base

到构建文件并工作。

This page 将拯救你的生命,无论你是否使用 pipenv,

对于 Alpine(>=3.6),使用

apk --update --upgrade add gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev