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?
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.
Cela a fonctionné pour moi
Sudo apt-get install libjpeg-dev zlib1g-dev
pip install Pillow
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.
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
.
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
Ajouter simplement "RUN apk add jpeg-dev" à Dockerfile a résolu le problème pour moi.