'Django, Docker, Python - Unable to install Pillow on python-alpine
I have a dockerized django app that I want to put in production. But ever since I added an Imagefield Pillow is required and I struggle to install Pillow in the Docker container.
As far as I understand it, adding the dependencies jpeg-dev ibjpeg & zlib-dev should be enough for django (?). With the configuration below I receive the error:
Error on 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".
If I add Pillow to requirements.txt (or putting pip install Pillow in the Dockerfile) I get an even longer error message while trying to build the container.
Without putting pip install Pillow in Dockerfile or requirements.txt - this is my configuration.
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"]
Requirements.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
I have been stuck with this for a while. Can someone help?
Solution 1:[1]
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
Solution 2:[2]
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
Solution 3:[3]
Add this to your Docker file
RUN apk add postgresql-dev gcc python3-dev musl-dev jpeg-dev zlib-dev
Solution 4:[4]
#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
Solution 5:[5]
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | LinPy |
| Solution 2 | gastrodon |
| Solution 3 | José Jaraba |
| Solution 4 | Krishna Jhapate |
| Solution 5 | Nima |
