在 Docker 中使用 Pillow

Using Pillow in Docker

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

requirements.txt

Pillow
flask
redis

Dockerfile

FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

app.py

import PIL

命令

$ 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

这是我得到的: 输出

web_1   |   File "app.py", line 1, in <module>
web_1   |     import PIL
web_1   | ImportError: No module named PIL

我想也许在 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))

知道应该从这里做什么吗?

PIL 将是 Python Imaging Library (PIL)
(有时,you would need import Image instead of import PIL

根据“How do I install python imaging library (PIL)?”,您还需要安装其他组件

sudo apt-get build-dep python-imaging
sudo apt-get install libjpeg62 libjpeg62-dev
pip install PIL

另请参阅 a5huynh/scrapyd-playground/Dockerfile 以获取使用 Pillow(Python 成像库)依赖项的示例。

(但请注意,作为 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

要求:

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

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

the decoders / image processors are still missing which results in error like OSError: decoder tiff_lzw not available

不过他补充说:

I found out my problem originated from a buggy Pillow version (5.0), it complained about missing tiff stuff but in fact it was not missing.

如果你正在使用 docker 像我一样编写 运行 docker-compose up --build 然后将枕头添加到 requirements.txt

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

中添加Pillow

docs say "Pillow and PIL cannot co-exist in the same environment. Before installing Pillow, please uninstall PIL." Once that is taken care of, the answer by solved the issue for me. Based on which docker image you use, you can check the pillow docker images 您的 docker 图像的确切依赖关系。