在 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 图像的确切依赖关系。
出于某种原因,我无法在 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
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
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