PIL Image ImportError

Marc Wilson picture Marc Wilson · Oct 1, 2013 · Viewed 14.2k times · Source

I have Pillow and qrcode modules installed in a virtual environment.

From the python shell, I can create a test image programmatically using PIL:

>>> from PIL import Image
>>> img = Image.new('1', (200, 200))
>>> img.save('test-image.jpeg', 'JPEG')

Great, that works just as I would expect it to. However, I'm getting this error when I try to use a module that relies on PIL:

>>> import qrcode
>>> qr_code = qrcode.make("1") 
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/main.py", line 8, in make
     return qr.make_image()
   File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/main.py", line 186, in make_image
     from qrcode.image.pil import PilImage
   File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/image/pil.py", line 5, in <module>
     import Image
ImportError: No module named Image

Why can't qrcode import PIL's Image class but it works from the shell?

Answer

Stefano Sanfilippo picture Stefano Sanfilippo · Oct 1, 2013

This is an issue with your installation: Image module have been installed as subpackage of a PIL module, while the library you are using expects Image module to be directly in the python path. Simplest solution is to replace:

import Image

with:

from PIL import Image

in file qrcode/image/pil.py.