pip, PIL and Pillow

clime picture clime · Feb 28, 2013 · Viewed 10.7k times · Source

I ran the following command to install project dependencies into virtualenv novacek:

(novacek) $ pip install -r reqs.txt

reqs.txt looks like this:

Django==1.4.4
Pillow==1.7.8
South==0.7.6
django-bootstrap-toolkit==2.8.0
django-debug-toolbar==0.9.4
django-filebrowser==3.5.1
-e git+https://github.com/ir4y/django-flatblocks.git@4f8b2c86fe94e19dc7aa86b80a204918e2142aff#egg=django_flatblocks-dev
django-generic-flatblocks==0.9.1
django-grappelli==2.4.3
django-hvad==0.2
django-photologue==2.5
docutils==0.10
psycopg2==2.4.6
wsgiref==0.1.2

As you can see, there is no PIL package, only Pillow, but in the end of the installation process I got this:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.3 (default, Feb 21 2013, 13:39:24)
              [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------

Which is strange. I had also got the setup summary for Pillow earlier (with enabled support for jpeg and zlib btw. as Pillow can actually find my libraries).

And If I run pip freeze from virtualenv after the installation, I get this:

Django==1.4.4
PIL==1.1.7
Pillow==1.7.8
South==0.7.6
django-bootstrap-toolkit==2.8.0
django-debug-toolbar==0.9.4
django-filebrowser==3.5.1
-e git+https://github.com/ir4y/django-flatblocks.git@4f8b2c86fe94e19dc7aa86b80a204918e2142aff#egg=django_flatblocks-dev
django-generic-flatblocks==0.9.1
django-grappelli==2.4.3
django-hvad==0.2
django-photologue==2.5
docutils==0.10
psycopg2==2.4.6
wsgiref==0.1.2

PIL has got into dependecies. Why?

Answer

Martijn Pieters picture Martijn Pieters · Feb 28, 2013

This is entirely correct. Pillow is a fork, alternative re-packaging of PIL.

From the PyPI page for Pillow:

The fork author's goal is to foster packaging improvements via:

  • Publicized development and solicitation of community support.
  • Exploration of packaging problems within the fork, most noticably via adding setuptools support but also via clean up & refactoring of packaging code.

Inside the package this is still the PIL project and will still emit messages under that name when compiling.

Unfortunately, Pillow does not claim to satisfy the PIL requirement, so anything that depends on PIL instead will still pull PIL in.