1. ホーム
  2. python

[解決済み] 「Alpine LinuxにPillowをインストールすると、「jpegのヘッダーまたはライブラリファイルが見つかりません。

2023-06-24 13:05:02

質問

PythonのScrapyをDockerコンテナで実行しようとしています。 python:alpine . 以前はうまくいっていたのですが、今はScrapyの 画像パイプライン を使いたいのですが、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 だったので、これが「犯人」かもしれません。それにもかかわらず、トレースバックとエラーメッセージは、次のように言っているようです。 jpeg が欠落していると言っているようですが、私は openjpeg .

を変更するにはどうしたらよいでしょうか。 Dockerfile を修正することができます。 pip install Pillow が実行されますか?

どのように解決するのですか?

後に削除されたと思われるコメントで、ある人が私を次のように指摘しました。 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

これでビルドに成功しました。