Installing PIL in a VirtualEnv

July 22, 2011

I had a problem installing the python imaging library (PIL) in a virtualenv on debian.

It gave the following error:

(bbr)drumcoder@drumcoder:~/jenkins/bbr/bbr$ easy_install pil
Searching for pil
Reading http://pypi.python.org/simple/pil/
Reading http://www.pythonware.com/products/pil
Reading http://effbot.org/downloads/#Imaging
Reading http://effbot.org/zone/pil-changes-115.htm
Best match: PIL 1.1.7
Downloading http://effbot.org/media/downloads/PIL-1.1.7.tar.gz
Processing PIL-1.1.7.tar.gz
Running PIL-1.1.7/setup.py -q bdist_egg --dist-dir /tmp/easy_install-5wiR3d/PIL-1.1.7/egg-dist-tmp-0d8r_t
WARNING: '' not a valid package name; please use only.-separated package names in setup.py
_imaging.c:75:20: error: Python.h: No such file or directory
In file included from libImaging/Imaging.h:14,
                 from _imaging.c:77:
libImaging/ImPlatform.h:14:2: error: #error Sorry, this library requires support for ANSI prototypes.
libImaging/ImPlatform.h:17:2: error: #error Sorry, this library requires ANSI header files.
libImaging/ImPlatform.h:55:2: error: #error Cannot find required 32-bit integer type
In file included from _imaging.c:77:
libImaging/Imaging.h:90: error: expected specifier-qualifier-list before 'INT32'
libImaging/Imaging.h:264: error: expected specifier-qualifier-list before 'INT32'
libImaging/Imaging.h:395: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ImagingCRC32'
_imaging.c:124: error: expected specifier-qualifier-list before 'PyObject_HEAD'
_imaging.c:129: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:143: error: expected specifier-qualifier-list before 'PyObject_HEAD'
_imaging.c:151: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:154: error: expected specifier-qualifier-list before 'PyObject_HEAD'
_imaging.c:160: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:165: error: expected specifier-qualifier-list before 'PyObject_HEAD'
_imaging.c:170: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:172: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c: In function '_dealloc':
_imaging.c:204: error: 'ImagingObject' has no member named 'access'
_imaging.c:206: error: 'ImagingObject' has no member named 'image'
_imaging.c:207: warning: implicit declaration of function 'PyMem_DEL'
_imaging.c: At top level:
_imaging.c:212: error: expected ')' before '*' token
_imaging.c: In function 'ImagingSectionEnter':
_imaging.c:230: error: 'PyThreadState' undeclared (first use in this function)
_imaging.c:230: error: (Each undeclared identifier is reported only once
_imaging.c:230: error: for each function it appears in.)
_imaging.c:230: error: expected expression before ')' token
_imaging.c: In function 'ImagingSectionLeave':
_imaging.c:237: warning: implicit declaration of function 'PyEval_RestoreThread'
_imaging.c:237: error: 'PyThreadState' undeclared (first use in this function)
_imaging.c:237: error: expected expression before ')' token
_imaging.c: At top level:
_imaging.c:248: error: expected ')' before '*' token
_imaging.c:257: error: expected ')' before '*' token
_imaging.c: In function 'ImagingError_IOError':
_imaging.c:301: warning: implicit declaration of function 'PyErr_SetString'
_imaging.c:301: error: 'PyExc_IOError' undeclared (first use in this function)
_imaging.c:302: error: 'NULL' undeclared (first use in this function)
_imaging.c: In function 'ImagingError_MemoryError':
_imaging.c:308: warning: implicit declaration of function 'PyErr_NoMemory'
_imaging.c:308: warning: return makes pointer from integer without a cast
_imaging.c: In function 'ImagingError_Mismatch':
_imaging.c:314: error: 'PyExc_ValueError' undeclared (first use in this function)
_imaging.c:315: error: 'NULL' undeclared (first use in this function)
_imaging.c: In function 'ImagingError_ModeError':
_imaging.c:321: error: 'PyExc_ValueError' undeclared (first use in this function)
_imaging.c:322: error: 'NULL' undeclared (first use in this function)
_imaging.c: In function 'ImagingError_ValueError':
_imaging.c:329: error: 'PyExc_ValueError' undeclared (first use in this function)
_imaging.c:332: error: 'NULL' undeclared (first use in this function)
_imaging.c: In function 'ImagingError_Clear':
_imaging.c:338: warning: implicit declaration of function 'PyErr_Clear'
_imaging.c: At top level:
_imaging.c:369: error: expected ')' before '*' token
_imaging.c:464: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:510: error: expected ')' before '*' token
_imaging.c:587: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:619: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:631: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:643: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:655: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:664: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:675: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:686: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:697: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:719: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:743: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:760: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:777: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:786: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:803: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:813: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:824: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:857: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:879: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:914: error: expected ')' before '*' token
_imaging.c:954: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:981: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1054: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1065: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1075: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1114: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1191: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1202: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1339: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1359: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1394: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1419: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1448: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1459: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1479: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1530: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1568: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1614: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1689: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1739: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1765: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1771: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1783: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1817: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1845: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1874: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1885: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1901: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1922: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1928: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1939: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1950: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1961: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1972: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:1983: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2001: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2019: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2030: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2041: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2052: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2063: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2081: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c: In function '_font_dealloc':
_imaging.c:2142: warning: implicit declaration of function 'Py_XDECREF'
_imaging.c:2142: error: 'ImagingFontObject' has no member named 'ref'
_imaging.c: In function 'textwidth':
_imaging.c:2152: error: 'ImagingFontObject' has no member named 'glyphs'
_imaging.c: At top level:
_imaging.c:2157: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2205: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2215: error: array type has incomplete element type
_imaging.c:2216: error: 'PyCFunction' undeclared here (not in a function)
_imaging.c:2216: error: expected '}' before '_font_getmask'
_imaging.c:2217: error: expected '}' before '_font_getsize'
_imaging.c:2218: error: 'NULL' undeclared here (not in a function)
_imaging.c:2221: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2229: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c: In function '_draw_dealloc':
_imaging.c:2257: error: 'ImagingDrawObject' has no member named 'image'
_imaging.c: At top level:
_imaging.c:2261: error: expected ')' before '*' token
_imaging.c:2263: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2278: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2298: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2335: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2353: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2390: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2406: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2459: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2474: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2507: error: expected ')' before '*' token
_imaging.c:2509: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2536: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2554: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2600: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2637: error: array type has incomplete element type
_imaging.c:2640: error: expected '}' before '_draw_line'
_imaging.c:2641: error: expected '}' before '_draw_lines'
_imaging.c:2643: error: expected '}' before '_draw_outline'
_imaging.c:2645: error: expected '}' before '_draw_polygon'
_imaging.c:2646: error: expected '}' before '_draw_rectangle'
_imaging.c:2647: error: expected '}' before '_draw_point'
_imaging.c:2648: error: expected '}' before '_draw_points'
_imaging.c:2649: error: expected '}' before '_draw_arc'
_imaging.c:2650: error: expected '}' before '_draw_bitmap'
_imaging.c:2651: error: expected '}' before '_draw_chord'
_imaging.c:2652: error: expected '}' before '_draw_ellipse'
_imaging.c:2653: error: expected '}' before '_draw_pieslice'
_imaging.c:2654: error: expected '}' before '_draw_ink'
_imaging.c:2659: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2668: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c: In function 'pixel_access_dealloc':
_imaging.c:2693: error: 'PixelAccessObject' has no member named 'image'
_imaging.c: At top level:
_imaging.c:2697: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2708: error: expected declaration specifiers or '...' before 'PyObject'
_imaging.c:2708: error: expected declaration specifiers or '...' before 'PyObject'
_imaging.c: In function 'pixel_access_setitem':
_imaging.c:2710: error: 'PixelAccessObject' has no member named 'image'
_imaging.c:2714: error: 'PixelAccessObject' has no member named 'readonly'
_imaging.c:2719: warning: implicit declaration of function '_getxy'
_imaging.c:2719: error: 'xy' undeclared (first use in this function)
_imaging.c:2723: error: 'PyExc_IndexError' undeclared (first use in this function)
_imaging.c:2727: error: 'color' undeclared (first use in this function)
_imaging.c:2730: warning: implicit declaration of function 'getink'
_imaging.c:2733: error: 'PixelAccessObject' has no member named 'image'
_imaging.c: At top level:
_imaging.c:2744: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2763: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2774: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2791: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2811: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2846: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:2867: error: array type has incomplete element type
_imaging.c:2870: error: expected '}' before '_getpixel'
_imaging.c:2871: error: expected '}' before '_putpixel'
_imaging.c:2873: error: expected '}' before 'pixel_access_new'
_imaging.c:2876: error: expected '}' before '_convert'
_imaging.c:2877: error: expected '}' before '_convert2'
_imaging.c:2878: error: expected '}' before '_convert_matrix'
_imaging.c:2879: error: expected '}' before '_copy'
_imaging.c:2880: error: expected '}' before '_copy2'
_imaging.c:2884: error: expected '}' before '_crop'
_imaging.c:2885: error: expected '}' before '_expand'
_imaging.c:2886: error: expected '}' before '_filter'
_imaging.c:2887: error: expected '}' before '_histogram'
_imaging.c:2889: error: expected '}' before '_modefilter'
_imaging.c:2891: error: expected '}' before '_offset'
_imaging.c:2892: error: expected '}' before '_paste'
_imaging.c:2893: error: expected '}' before '_point'
_imaging.c:2894: error: expected '}' before '_point_transform'
_imaging.c:2895: error: expected '}' before '_putdata'
_imaging.c:2897: error: expected '}' before '_quantize'
_imaging.c:2900: error: expected '}' before '_rankfilter'
_imaging.c:2902: error: expected '}' before '_resize'
_imaging.c:2903: error: expected '}' before '_rotate'
_imaging.c:2904: error: expected '}' before '_stretch'
_imaging.c:2905: error: expected '}' before '_transpose'
_imaging.c:2906: error: expected '}' before '_transform2'
_imaging.c:2908: error: expected '}' before '_isblock'
_imaging.c:2910: error: expected '}' before '_getbbox'
_imaging.c:2911: error: expected '}' before '_getcolors'
_imaging.c:2912: error: expected '}' before '_getextrema'
_imaging.c:2913: error: expected '}' before '_getprojection'
_imaging.c:2915: error: expected '}' before '_getband'
_imaging.c:2916: error: expected '}' before '_putband'
_imaging.c:2917: error: expected '}' before '_fillband'
_imaging.c:2919: error: expected '}' before 'im_setmode'
_imaging.c:2921: error: expected '}' before '_getpalette'
_imaging.c:2922: error: expected '}' before '_putpalette'
_imaging.c:2923: error: expected '}' before '_putpalettealpha'
_imaging.c:2927: error: expected '}' before '_chop_invert'
_imaging.c:2928: error: expected '}' before '_chop_lighter'
_imaging.c:2929: error: expected '}' before '_chop_darker'
_imaging.c:2930: error: expected '}' before '_chop_difference'
_imaging.c:2931: error: expected '}' before '_chop_multiply'
_imaging.c:2932: error: expected '}' before '_chop_screen'
_imaging.c:2933: error: expected '}' before '_chop_add'
_imaging.c:2934: error: expected '}' before '_chop_subtract'
_imaging.c:2935: error: expected '}' before '_chop_add_modulo'
_imaging.c:2936: error: expected '}' before '_chop_subtract_modulo'
_imaging.c:2937: error: expected '}' before '_chop_and'
_imaging.c:2938: error: expected '}' before '_chop_or'
_imaging.c:2939: error: expected '}' before '_chop_xor'
_imaging.c:2944: error: expected '}' before '_gaussian_blur'
_imaging.c:2945: error: expected '}' before '_unsharp_mask'
_imaging.c:2950: error: expected '}' before '_effect_spread'
_imaging.c:2954: error: expected '}' before '_new_array'
_imaging.c:2955: error: expected '}' before '_new_block'
_imaging.c:2958: error: expected '}' before '_save_ppm'
_imaging.c:2967: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c: In function 'image_length':
_imaging.c:2996: error: 'ImagingObject' has no member named 'image'
_imaging.c: At top level:
_imaging.c:3001: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3016: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'image_as_sequence'
_imaging.c:3029: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:3050: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:3062: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:3076: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pixel_access_as_mapping'
_imaging.c:3084: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PyTypeObject'
_imaging.c:3106: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3107: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3108: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3109: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3110: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3111: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3112: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3113: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3114: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3115: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3116: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3117: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3118: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3119: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3120: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3123: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3124: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3125: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3126: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3127: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3128: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3129: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3144: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3147: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3149: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3150: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
_imaging.c:3152: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'functions'
_imaging.c:3250: warning: return type defaults to 'int'
_imaging.c: In function 'DL_EXPORT':
_imaging.c:3250: error: expected declaration specifiers before 'init_imaging'
_imaging.c:3281: error: expected '{' at end of input
error: Setup script exited with error: command 'gcc' failed with exit status 1

The simple solution to this error is to install the python-dev package:

# apt-get install python-dev

PIL will now install successfully.