web-dev-qa-db-fra.com

"Les en-têtes ou les fichiers de bibliothèque introuvables pour jpeg" Installation de Pillow sur Alpine Linux

J'essaie d'exécuter Scrapy de Python dans un conteneur Docker basé sur python: Alpine . Cela fonctionnait auparavant, mais j'aimerais maintenant utiliser Scrapy's Image Pipeline , qui nécessite l'installation de Pillow.

À titre d’exemple simplifié, j’ai essayé la Dockerfile suivante:

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

Cependant, lorsque j'essaie de le construire, j'obtiens une erreur qui contient ce qui suit:

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

J'ai parcouru les conditions requises sur https://pillow.readthedocs.io/en/latest/installation.html et j'ai essayé de trouver les packages correspondants pour Alpine, bien que je ne puisse pas en trouver libimagequant, cela pourrait donc être le "coupable". Néanmoins, le message de traceback et d'erreur semble indiquer que jpeg est manquant, alors que j'ai installé openjpeg

Comment modifier la Dockerfile pour que pip install Pillow s'exécute?

15
Kurt Peek

Dans un commentaire qui semble avoir été supprimé plus tard, quelqu'un m'a indiqué https://github.com/python-pillow/Pillow/blob/c05099f45c0d94a2a98c3609a96bdb6cf7446627/depends/Alpine_Dockerfile . Sur la base de ce fichier Dockerfile, j'ai modifié le mien comme suit:

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

Maintenant, il construit avec succès.

24
Kurt Peek

Cela a fonctionné pour moi 

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

avez-vous vu ce QA? Echec lors de l'installation de Pillow (module Python) sous Linux

ils disent que vous devez mettre à jour votre pip et installer libjpeg-dev.

4
Gabbax0r

J'ai rencontré ce problème avec l'image fixe Docker python:3.6-Alpine Je l'ai résolu en ajoutant ces paquets apk add jpeg-dev zlib-dev.

2
JohnnyQ

Avez-vous essayé de créer un fichier Requirements.txt et de l'insérer dans 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/

exemple d'exigences.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

Ajouter simplement "RUN apk add jpeg-dev" à Dockerfile a résolu le problème pour moi.

0
Arash Khoeini