“找不到 jpeg 的头文件或库文件”在 Alpine Linux 上安装 Pillow

我试图在基于 阿尔卑斯山的 Docker 容器中运行 Python 的 Scrapy。它以前是工作,但现在我想使用 Scrapy 的 图像管道,这需要我安装枕头。

作为一个简化的例子,我尝试了以下 Dockerfile:

FROM python:alpine
RUN apk --update add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc openssl-dev curl
RUN apk add libjpeg zlib tiff freetype lcms libwebp tcl openjpeg
RUN pip install Pillow

但是,当我尝试构建它时,我得到一个错误,其中包含以下内容:

Traceback (most recent call last):
File "/tmp/pip-build-ft5yzzuv/Pillow/setup.py", line 744, in <module>
zip_safe=not debug_build(), )
File "/usr/local/lib/python3.6/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/local/lib/python3.6/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/local/lib/python3.6/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/local/lib/python3.6/site-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/usr/local/lib/python3.6/distutils/command/install.py", line 545, in run
self.run_command('build')
File "/usr/local/lib/python3.6/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/local/lib/python3.6/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/local/lib/python3.6/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/usr/local/lib/python3.6/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/local/lib/python3.6/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/local/lib/python3.6/distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "/tmp/pip-build-ft5yzzuv/Pillow/setup.py", line 545, in build_extensions
raise RequiredDependencyException(f)
__main__.RequiredDependencyException: jpeg


During handling of the above exception, another exception occurred:


Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-ft5yzzuv/Pillow/setup.py", line 756, in <module>
raise RequiredDependencyException(msg)
__main__.RequiredDependencyException:


The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.


Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html

我通过对 https://pillow.readthedocs.io/en/latest/installation.html的要求,并试图找到相应的包阿尔卑斯山,虽然我找不到一个是 Libimagequant,所以这可能是“罪魁祸首”。尽管如此,它的回溯和错误消息似乎是说 jpeg丢失了,而我已经安装了 openjpeg

如何修改 Dockerfile使 pip install Pillow运行?

98917 次浏览

have you seen this QA? Fail during installation of Pillow (Python module) in Linux

they say you have to update your pip and install libjpeg-dev.

Have you try to create a requirements.txt and insert this in Dockerfile:

    RUN apt-get update -qq && apt-get install build-essential g++ flex bison gperf ruby perl \
mysql-client \
libsqlite3-dev libmysqlclient-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev \
libpng-dev libjpeg-dev python libx11-dev libxext-dev -y
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
COPY . /code
RUN pip install -r requirements.txt
ADD . /code/

example of requirements.txt

Django==1.9.7
django-appconf==1.0.1
django-filer==1.2.5
django-filter==0.15.0
django-grappelli==2.8.1
django-image-cropping==1.0.3
django-mptt==0.8.6
django-nested-admin==3.0.10
django-nested-inline==0.3.6
django-polymorphic==0.8.1
django-taggit==0.21.2
django-tinymce==2.4.0
dnspython==1.15.0
easy-thumbnails==2.3
enum34==1.1.2
funcsigs==0.4
idna==2.1
ipaddress==1.0.17
mercurial==3.7.3
mock==1.3.0
mysql-python
ndg-httpsclient==0.4.2
parsedatetime==2.1
pbr==1.8.0
Pillow==3.3.1
psutil==3.4.2
pyasn1==0.1.9
PyICU==1.9.2
pyOpenSSL==16.1.0
pyRFC3339==1.0
python-augeas==0.5.0
python-monkey-business==1.0.0
python2-pythondialog==3.3.0
pytz==2014.10
requests==2.11.1
six==1.10.0
Unidecode==0.4.19
urllib3==1.16
zope.component==4.2.2
zope.event==4.2.0
zope.hookable==4.0.4
zope.interface==4.1.3

In a comment that appears to have been deleted later, someone pointed me to https://github.com/python-pillow/Pillow/blob/c05099f45c0d94a2a98c3609a96bdb6cf7446627/depends/alpine_Dockerfile. Based on that Dockerfile I modified my own as follows:

FROM python:alpine
RUN apk --update add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc openssl-dev curl
RUN apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev
RUN pip install Pillow

Now it builds successfully.

For debian

sudo apt install libjpeg-dev zlib1g-dev
pip install Pillow

Just adding "RUN apk add jpeg-dev" to Dockerfile fixed the problem for me.

I ran into this problem with docker image python:3.6-alpine I solved it by adding these packages apk add jpeg-dev zlib-dev.

If you're missing libjpeg.so package in runtime, try this (alpine linux):

apk add --no-cache jpeg

Just in case anyone else is still struggling like I was you can see the official alpine Dockerfile for Pillow here: https://github.com/python-pillow/docker-images/blob/master/alpine/Dockerfile#L20

It states the following dependencies:

RUN apk --no-cache add python3 \


...


# Pillow dependencies
jpeg-dev \
zlib-dev \
freetype-dev \
lcms2-dev \
openjpeg-dev \
tiff-dev \
tk-dev \
tcl-dev \
harfbuzz-dev \
fribidi-dev

In short, this helps:

RUN apt-get update -qq && apt-get install -y build-essential libsqlite3-dev \
libpng-dev libjpeg-dev

Detailed:

I have the same error with python:3.8-slim-buster image. Solution presented by @pierangelo-orizio worked for me, but I just cleaned it to a minimal required packages list. So here is my Dockerfile:

FROM python:3.8-slim-buster


RUN apt-get update -qq && apt-get install -y build-essential libsqlite3-dev \
libpng-dev libjpeg-dev


COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt


EXPOSE 8000
VOLUME /usr/src/app
WORKDIR /usr/src/app
CMD python manage.py runserver 0.0.0.0:8000

And requirements.txt:

Django>=2.1,<2.2
wagtail>=2.4,<2.5
django-cors-headers==2.5.3
python-dotenv==0.10.3

For macOS:

brew install libtiff libjpeg webp little-cms2

Reason: https://pillow.readthedocs.io/en/latest/installation.html

Run into the same issue on python 3.9. Fixed it by bumping pillow version in requirements.txt to Pillow>=8.0. There's a nice matrix of which pillow version supports which python version here.

enter image description here

For yum users, this should work:

sudo yum -y install libjpeg-turbo-devel
pip3 install Pillow