"The headers or library files could not be found for jpeg" 在 Alpine 上安装 Pillow Linux
"The headers or library files could not be found for jpeg" installing Pillow on Alpine Linux
我正在尝试 运行 Python 的 Scrapy 基于 python:alpine. It was working before, but now I'd like to use Scrapy's Image Pipeline 的 Docker 容器,这需要我安装 Pillow。
作为简化示例,我尝试了以下 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 的要求并试图找到 Alpine 的相应包,虽然我找不到的是 libimagequant,所以这可能是'culprit'。尽管如此,回溯和错误消息似乎是说缺少 jpeg
,而我已经安装了 openjpeg
。
如何修改 Dockerfile
以便 pip install Pillow
运行s?
你看过这个QA吗?
他们说你必须更新你的 pip 并安装 libjpeg-dev。
您是否尝试创建 requirements.txt 并将其插入 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/
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
在一条似乎后来被删除的评论中,有人将我指向 https://github.com/python-pillow/Pillow/blob/c05099f45c0d94a2a98c3609a96bdb6cf7446627/depends/alpine_Dockerfile。基于那个 Dockerfile,我修改了自己的如下:
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
现在构建成功了。
对于 debian
sudo apt install libjpeg-dev zlib1g-dev
pip install Pillow
只需将 "RUN apk add jpeg-dev" 添加到 Dockerfile 就解决了我的问题。
我 运行 使用 docker 图片解决了这个问题 python:3.6-alpine
我通过添加这些包解决了它 apk add jpeg-dev zlib-dev
.
如果你在运行时缺少 libjpeg.so
包,试试这个(alpine linux):
apk add --no-cache jpeg
以防其他人仍然像我一样苦苦挣扎,您可以在此处查看 Pillow 的官方 alpine Dockerfile:https://github.com/python-pillow/docker-images/blob/master/alpine/Dockerfile#L20
它声明了以下依赖项:
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
简而言之,这有助于:
RUN apt-get update -qq && apt-get install -y build-essential libsqlite3-dev \
libpng-dev libjpeg-dev
详细:
我对 python:3.8-slim-buster
图片有同样的错误。 @pierangelo-orizio 提供的解决方案对我有用,但我只是将它清理到最小的必需包列表。所以这是我的 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
和requirements.txt
:
Django>=2.1,<2.2
wagtail>=2.4,<2.5
django-cors-headers==2.5.3
python-dotenv==0.10.3
对于 macOS:
brew install libtiff libjpeg webp little-cms2
原因:
https://pillow.readthedocs.io/en/latest/installation.html
运行 在 python 3.9 上进入同一问题。通过将 requirements.txt
中的 pillow 版本更改为 Pillow>=8.0
来修复它。有一个很好的矩阵,其中枕头版本支持哪个 python 版本 here。
对于 yum 用户,这应该有效:
sudo yum -y install libjpeg-turbo-devel
pip3 install Pillow
我正在尝试 运行 Python 的 Scrapy 基于 python:alpine. It was working before, but now I'd like to use Scrapy's Image Pipeline 的 Docker 容器,这需要我安装 Pillow。
作为简化示例,我尝试了以下 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 的要求并试图找到 Alpine 的相应包,虽然我找不到的是 libimagequant,所以这可能是'culprit'。尽管如此,回溯和错误消息似乎是说缺少 jpeg
,而我已经安装了 openjpeg
。
如何修改 Dockerfile
以便 pip install Pillow
运行s?
你看过这个QA吗?
他们说你必须更新你的 pip 并安装 libjpeg-dev。
您是否尝试创建 requirements.txt 并将其插入 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/
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
在一条似乎后来被删除的评论中,有人将我指向 https://github.com/python-pillow/Pillow/blob/c05099f45c0d94a2a98c3609a96bdb6cf7446627/depends/alpine_Dockerfile。基于那个 Dockerfile,我修改了自己的如下:
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
现在构建成功了。
对于 debian
sudo apt install libjpeg-dev zlib1g-dev
pip install Pillow
只需将 "RUN apk add jpeg-dev" 添加到 Dockerfile 就解决了我的问题。
我 运行 使用 docker 图片解决了这个问题 python:3.6-alpine
我通过添加这些包解决了它 apk add jpeg-dev zlib-dev
.
如果你在运行时缺少 libjpeg.so
包,试试这个(alpine linux):
apk add --no-cache jpeg
以防其他人仍然像我一样苦苦挣扎,您可以在此处查看 Pillow 的官方 alpine Dockerfile:https://github.com/python-pillow/docker-images/blob/master/alpine/Dockerfile#L20
它声明了以下依赖项:
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
简而言之,这有助于:
RUN apt-get update -qq && apt-get install -y build-essential libsqlite3-dev \
libpng-dev libjpeg-dev
详细:
我对 python:3.8-slim-buster
图片有同样的错误。 @pierangelo-orizio 提供的解决方案对我有用,但我只是将它清理到最小的必需包列表。所以这是我的 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
和requirements.txt
:
Django>=2.1,<2.2
wagtail>=2.4,<2.5
django-cors-headers==2.5.3
python-dotenv==0.10.3
对于 macOS:
brew install libtiff libjpeg webp little-cms2
原因: https://pillow.readthedocs.io/en/latest/installation.html
运行 在 python 3.9 上进入同一问题。通过将 requirements.txt
中的 pillow 版本更改为 Pillow>=8.0
来修复它。有一个很好的矩阵,其中枕头版本支持哪个 python 版本 here。
对于 yum 用户,这应该有效:
sudo yum -y install libjpeg-turbo-devel
pip3 install Pillow