2015-09-26 95 views
4

由于某种原因,我无法在docker中安装python的PIL模块。这里是什么,我有一个说明:在Docker中使用枕头

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 

我想也许添加PIL在requirements.txt会的工作,但这里是发生在我打造

$ 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)) 

任何想法从这里应该做什么?

回答

2

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参阅使用枕头为例(Python图像库)依赖关系。

(但要注意,如Hugocomments below,这个混合两个模块:PIL和枕头
枕头是维持叉和一个简易替换原来的,没有维护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 
+0

完美!使用a5huynh/scrapyd-playground/Dockerfile中的配置。但它在一个新的容器上工作,而不是现有的容器。不知道为什么。 – arbazkhan002

+1

一句警告,它​​混合了两个模块:'PIL'和'Pillow'。枕头是一个维护的叉子和原有的未维护的PIL的替代品,因此您不应该同时安装两者。 – Hugo

+1

@Hugo好点:我已将您的评论添加到答案中,以获得更多的知名度。 – VonC