作者:美猴qing_243 | 来源:互联网 | 2023-02-03 16:20
我正在尝试在基于python:alpine的Docker容器中运行Python的Scrapy .它以前工作过,但现在我想使用Scrapy的Image Pipeline,它需要我安装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
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 "", line 1, in
File "/tmp/pip-build-ft5yzzuv/Pillow/setup.py", line 756, in
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,所以这可能是'罪魁祸首".尽管如此,追溯和错误消息似乎在说jpeg
缺少了,而我已经安装了openjpeg
.
如何修改Dockerfile
以便pip install Pillow
运行?
1> 小智..:
这对我有用
sudo apt-get install libjpeg-dev zlib1g-dev
pip install Pillow
2> Kurt Peek..:
在以后似乎已被删除的评论中,有人指向我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
现在它成功构建.
只需解决“ apk add jpeg-dev”问题,即可解决“找不到jpeg的标头或库文件”的问题
仔细阅读错误后,我注意到“找不到jpeg的头文件或库文件”部分。这些标头保存在* -dev软件包中。所以我去了https://pkgs.alpinelinux.org/packages?name=libjpeg*&branch=edge,最后“ apk --no-cache --update-cache add libjpeg-turbo-dev zlib-dev”做了诀窍。
我用更少的Linux软件包摆脱了困境:```FROM python:3.7-alpine RUN apk --update add gcc libgcc musl-dev jpeg-dev zlib-dev```构建速度更快,并且获取的二进制文件更少。
3> Gabbax0r..:
您看过此质量检查了吗?在Linux中安装Pillow(Python模块)期间失败
他们说您必须更新您的pip并安装libjpeg-dev。
4> JohnnyQ..:
我遇到了docker image这个问题,python:3.6-alpine
我通过添加这些软件包解决了它apk add jpeg-dev zlib-dev
。