簡體   English   中英

Django、Docker、Python - 無法在 python-alpine 上安裝 Pillow

[英]Django, Docker, Python - Unable to install Pillow on python-alpine

我有一個 django 應用程序,我想投入生產。 但是自從我添加了一個 Imagefield Pillow 之后,我就很難在 Docker 容器中安裝 Pillow。

據我了解,添加依賴項 jpeg-dev ibjpeg & zlib-dev 應該足以滿足 django (?)。 使用下面的配置我收到錯誤:

運行服務器runserver

product.Product.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
    HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
product.Product.thumbnail: (fields.E210) Cannot use ImageField because Pillow is not installed.
    HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".

如果我將 Pillow 添加到 requirements.txt(或將pip install Pillow放入 Dockerfile),我會在嘗試構建容器時收到更長的錯誤消息。

無需將pip install Pillow到 Dockerfile 或 requirements.txt - 這是我的配置。

Dockerfile:

# pull official base image
FROM python:3.7-alpine

# set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# set work directory
WORKDIR /usr/src/kitschoen-dj

RUN pip install --upgrade pip

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

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/kitschoen-dj/requirements.txt
RUN pip install -r requirements.txt

# copy entrypoint.sh
COPY ./entrypoint.sh /usr/src/kitschoen-dj/entrypoint.sh

# copy project
COPY . /usr/src/kitschoen-dj/

# run entrypoint.sh
ENTRYPOINT ["/usr/src/kitschoen-dj/entrypoint.sh"]

要求.txt

astroid==2.1.0
certifi==2018.11.29
chardet==3.0.4
Django==2.1.7
django-cors-headers==2.4.0
django-filter==2.1.0
djangorestframework==3.9.1
djangorestframework-simplejwt==3.3
gunicorn==19.9.0
httpie==1.0.2
httpie-jwt-auth==0.3.0
idna==2.8
isort==4.3.4
lazy-object-proxy==1.3.1
Markdown==3.0.1
mccabe==0.6.1
PyJWT==1.7.1
requests==2.21.0
six==1.12.0
urllib3==1.24.1
wrapt==1.11.1

我已經堅持了一段時間。 有人可以幫忙嗎?

對於任何對我有用的東西感興趣的人。

我的問題有很多方面 - 一個是我在 docker 和 Ubuntu 方面做得並不好。

但這里有一些見解:安裝 Pillow 將需要幾個依賴項。 據我所知,你需要: gcc python3-dev jpeg-dev zlib-dev

為了防止這些依賴項最終出現在最終鏡像中(保持鏡像大小較小),您可以在虛擬包中安裝一些(不是全部!)它們,並在安裝 Pillow 后刪除它們(這些依賴項稱為構建依賴項 - 僅需要)在構建期間)。

所以這是對我有用的代碼:

RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-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

(Pillow 不需要一些東西,例如 postgressql、postgresql-dev) - 正如你所看到的,我在一個名為build-deps的虛擬包中安裝了我的構建依賴build-deps 之后,我正在安裝 Pillow,最后我將刪除構建依賴項。

我認為,這也是@LinPy 提出的解決方案,我只是想解釋一下這個非常冗長的內容以最終幫助他人。

apk add --virtual 命令的 .build-deps 是什么?

將此添加到您的Dockerfile

RUN apk add --no-cache jpeg-dev zlib-dev
RUN apk add --no-cache --virtual .build-deps build-base linux-headers \
    && pip install Pillow

來源: Github

我剛剛將這些行添加到我的 Dockerfile 中,它起作用了

RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN apk add --no-cache jpeg-dev zlib-dev
RUN apk del .tmp

我的 Dockerfile(使用 python:3.8-alpine):

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers
RUN apk add --no-cache jpeg-dev zlib-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp

將此添加到您的 Docker 文件中

RUN apk add postgresql-dev gcc python3-dev musl-dev jpeg-dev zlib-dev

#Docker 文件來自 python:3.7-alpine

工作目錄 \/app

設置環境變量<\/h1>

ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1

安裝 psycopg2 依賴項<\/h1>

運行 apk 更新
&& apk add postgresql-dev gcc python3-dev musl-dev libc-dev make git libffi-dev openssl-dev libxml2-dev libxslt-dev zlib-dev jpeg-dev

安裝依賴項<\/h1>

復制 requirements.txt \/app\/requirements.txt 運行 pip install --upgrade pip 運行 pip install -r requirements.txt

復制項目<\/h1>

復制 。 .

需求文件<\/h1>

Pillow==9.0.0<\/code>

"

就我而言,它對我有用

FROM python:3.9.7-alpine

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1


RUN mkdir /backend
ADD ./app /backend

WORKDIR /backend


RUN apk update && \
    apk add --virtual .tmp gcc python3-dev jpeg-dev zlib-dev musl-dev libjpeg py3-setuptools \
    tiff-dev openjpeg-dev freetype-dev lcms2-dev \
    libwebp-dev tcl-dev tk-dev harfbuzz-dev fribidi-dev libimagequant-dev \
    libxcb-dev libpng-dev alpine-sdk build-base openssl-dev dateutil tzdata py3-tz && \
    
    pip install --upgrade pip && \
    pip install -r requirements.txt && \
    echo 'requirements Installed' && \
    pip install uvicorn gunicorn  && \

    apk del .tmp



ENV DB_NAME  ******
ENV DB_USER ******
ENV DB_PASSWORD ******

ENV DJANGO_SUPERUSER_PASSWORD ******

CMD gunicorn myproject.asgi:application -k uvicorn.workers.UvicornWorker


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM