在Docker中使用Pillow

arb*_*002 8 python-imaging-library docker pillow

由于某种原因,我无法在docker中安装python的PIL模块.这是我所拥有的描述:

requirements.txt

Pillow
flask
redis
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
Run Code Online (Sandbox Code Playgroud)

app.py

import PIL
Run Code Online (Sandbox Code Playgroud)

命令

$ sudo docker build -t web .
Installing collected packages: Pillow, Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask, redis
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Pillow-2.9.0  Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24 redis-2.10.3
---> 91dfb38bd480
Removing intermediate container 4e4ca5801814
Step 4 : CMD python app.py
 ---> Running in e71453f2fab6
 ---> d62996658bd6
 Removing intermediate container e71453f2fab6
 Successfully built d62996658bd6

$ sudo docker-compose up
Run Code Online (Sandbox Code Playgroud)

这是我得到的: 输出

web_1   |   File "app.py", line 1, in <module>
web_1   |     import PIL
web_1   | ImportError: No module named PIL
Run Code Online (Sandbox Code Playgroud)

我想可能在requirements.txt中添加PIL会起作用,但这就是我构建时会发生的事情

$ sudo docker build -t web .
....
Collecting PIL (from -r requirements.txt (line 1))
Could not find a version that satisfies the requirement PIL (from -r    requirements.txt (line 1)) (from versions: )
Some externally hosted files were ignored as access to them may be  unreliable (use --allow-external PIL to allow).
No matching distribution found for PIL (from -r requirements.txt (line 1))
Run Code Online (Sandbox Code Playgroud)

知道应该从这里做什么?

小智 11

RUN apk add zlib-dev jpeg-dev gcc musl-dev在Dockerfile中添加,然后在requirements.txt中添加Pillow


Von*_*onC 7

PIL是Python Imaging Library(PIL)
(有时,您需要import Image而不是import PIL

根据“ 如何安装python映像库(PIL)? ”,您还需要安装其他组件。

sudo apt-get build-dep python-imaging
sudo apt-get install libjpeg62 libjpeg62-dev
pip install PIL
Run Code Online (Sandbox Code Playgroud)

另请参见a5huynh/scrapyd-playground/Dockerfile使用Pillow(Python Imaging Library)依赖项的示例。

(但是请注意,正如Hugo 在下面的评论中所述,它混合了两个模块:PIL和Pillow。Pillow
是维护的前叉,并且是原始的未维护的PIL的直接替代品,因此您不应该同时安装两个模块)

RUN apt-get update && apt-get install -y \
        python-dev python-pip python-setuptools \
        libffi-dev libxml2-dev libxslt1-dev \
        libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev \
        liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk
# Add the dependencies to the container and install the python dependencies
ADD requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt && rm /tmp/requirements.txt
RUN pip install Pillow
Run Code Online (Sandbox Code Playgroud)

符合要求:

Pillow==2.6.1
Scrapy==0.24.4
Twisted==14.0.2
boto==2.36.0
cffi==0.8.6
characteristic==14.2.0
cryptography==0.6.1
cssselect==0.9.1
lxml==3.4.0
pyOpenSSL==0.14
pyasn1==0.1.7
pyasn1-modules==0.0.5
pycparser==2.10
pymongo==2.8
queuelib==1.2.2
scrapy-mongodb==0.8.0
scrapyd==1.0.1
service-identity==14.0.0
six==1.8.0
w3lib==1.10.0
zope.interface==4.1.1
Run Code Online (Sandbox Code Playgroud)

在2019年(4年后),Daniel W.抱怨:

解码器/图像处理器仍然缺失,这会导致类似 OSError: decoder tiff_lzw not available

他补充说:

我发现我的问题源于有缺陷的Pillow版本(5.0),它抱怨缺少tiff东西,但实际上并没有缺失。