web-dev-qa-db-ja.com

「JPEGのヘッダーまたはライブラリファイルが見つかりませんでした」Alpine LinuxにPillowをインストールする

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 <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実行しますか?

23
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

これで正常にビルドされました。

28
Kurt Peek

これは私のために働いた

Sudo apt-get install libjpeg-dev zlib1g-dev
pip install Pillow
49
rogoro

このQAを見ましたか? LinuxでPillow(Pythonモジュール)のインストール中に失敗する

ピップを更新してlibjpeg-devをインストールする必要があると彼らは言います。

6
Gabbax0r

Docker image python:3.6-Alpineでこの問題に遭遇しました。これらのパッケージapk add jpeg-dev zlib-devを追加することで解決しました。

5
JohnnyQ

実行時にlibjpeg.soパッケージが見つからない場合は、これを試してください(Alpine Linux):

apk add --no-cache jpeg
1
Sriram

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
0

「RUN apk add jpeg-dev」をDockerfileに追加するだけで問題が修正されました。

0
Arash Khoeini