[Django]-Django, Docker, Python โ€“ Unable to install Pillow on python-alpine

68๐Ÿ‘

โœ…

For anyone who is interested in what worked for me (+ some background on why I ran into this):

Installing Pillow will require several dependencies. As far as I can tell, you need: gcc python3-dev jpeg-dev zlib-dev

To prevent these dependencies from ending up in the final image (keeping the image-size small) you can install some (not all!) of them in a virtual package.

After Pillow is installed successfully you can delete the dependencies that are only required for Pillowโ€™s installation.

Dependencies that are only needed during the build are called build dependencies.

So this is the code that worked for me:

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

(Some of the stuff is not required for Pillow, e. g. postgressql, postgresql-dev). As you can see, I installed my build dependencies in a virtual package called build-deps. AFTER installing the build dependencies, I am installing Pillow. At the end, I am removing the build dependencies.

I think, this is the solution that @LinPy proposed: I just wanted to explain this in a very verbose way to help others.

What is .build-deps for apk add โ€“virtual command?

๐Ÿ‘คXen_mar

22๐Ÿ‘

add this to your 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

source: Github

๐Ÿ‘คLinPy

6๐Ÿ‘

I just added these lines to my Dockerfile and it worked

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

My Dockerfile (using 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
๐Ÿ‘คAlan Moraes

0๐Ÿ‘

Add this to your Docker file

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

0๐Ÿ‘

#Docker file
FROM python:3.7-alpine

WORKDIR /app

set environment variables

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

install psycopg2 dependencies

RUN apk update
&& 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

install dependencies

COPY requirements.txt /app/requirements.txt
RUN pip install โ€“upgrade pip
RUN pip install -r requirements.txt

copy project

COPY . .

Requirement file

Pillow==9.0.0

๐Ÿ‘คKrishna Jhapate

0๐Ÿ‘

In my case it worked for me

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


๐Ÿ‘คBambier

Leave a comment