"无法找到jpeg的头文件或库文件"在Alpine Linux上安装Pillow

Kur*_*eek 28 python docker pillow dockerfile alpine-linux

我正在尝试在基于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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我浏览了https://pillow.readthedocs.io/en/latest/installation.html上的要求并尝试找到Alpine的相应软件包,虽然我找不到的是libimagequant,所以这可能是'罪魁祸首".尽管如此,追溯和错误消息似乎在说jpeg缺少了,而我已经安装了openjpeg.

如何修改Dockerfile以便pip install Pillow运行?

vam*_*msi 58

这对我有用

sudo apt-get install libjpeg-dev zlib1g-dev
pip install Pillow
Run Code Online (Sandbox Code Playgroud)

  • Alpine Linux 上不存在 `apt-get`,包管理器是 `apk`。 (6认同)
  • 即使在 Ubuntu 中,“apt”现在也是最终用户的首选包管理器 https://askubuntu.com/a/446484 (3认同)
  • 我只需要在 Ubuntu 20.04 上安装 `libjpeg-dev` (3认同)
  • 我在 Raspberry Pi 4b 上使用了这个答案,它有效 (2认同)

Kur*_*eek 31

在以后似乎已被删除的评论中,有人指向我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
Run Code Online (Sandbox Code Playgroud)

现在它成功构建.

  • 只需解决“ apk add jpeg-dev”问题,即可解决“找不到jpeg的标头或库文件”的问题 (5认同)
  • 仔细阅读错误后,我注意到“找不到jpeg的头文件或库文件”部分。这些标头保存在* -dev软件包中。所以我去了https://pkgs.alpinelinux.org/packages?name=libjpeg*&amp;branch=edge,最后“ apk --no-cache --update-cache add libjpeg-turbo-dev zlib-dev”做了诀窍。 (3认同)
  • 我用更少的Linux软件包摆脱了困境:```FROM python:3.7-alpine RUN apk --update add gcc libgcc musl-dev jpeg-dev zlib-dev```构建速度更快,并且获取的二进制文件更少。 (2认同)

leo*_*tan 11

对于 macOS:

brew install libtiff libjpeg webp little-cms2
Run Code Online (Sandbox Code Playgroud)

原因:https : //pillow.readthedocs.io/en/latest/installation.html


Wil*_*ill 9

以防万一其他人仍然像我一样苦苦挣扎,您可以在此处查看 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 Code Online (Sandbox Code Playgroud)


Gab*_*x0r 6

您看过此质量检查了吗?在Linux中安装Pillow(Python模块)期间失败

他们说您必须更新您的pip并安装libjpeg-dev。

  • Fedora 32 的“sudo dnf install libjpeg-turbo-devel libjpeg-turbo-utils” (5认同)
  • 他们没有提到基于 alpine 的解决方案:`apk add jpeg-dev` (2认同)

Joh*_*nyQ 6

我遇到了docker image这个问题,python:3.6-alpine我通过添加这些软件包解决了它apk add jpeg-dev zlib-dev


egv*_*gvo 6

简而言之,这有助于:

RUN apt-get update -qq && apt-get install -y build-essential libsqlite3-dev \
  libpng-dev libjpeg-dev
Run Code Online (Sandbox Code Playgroud)

详细的:

我对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
Run Code Online (Sandbox Code Playgroud)

并且requirements.txt

Django>=2.1,<2.2
wagtail>=2.4,<2.5
django-cors-headers==2.5.3
python-dotenv==0.10.3
Run Code Online (Sandbox Code Playgroud)