virtualenv中奇怪的PIL行为 - Python

时间:2012-05-31 18:36:58

标签: python python-imaging-library virtualenv

我有一个需要PIL的django应用程序而且我遇到了错误所以我决定在我的托管服务器上使用PIL。

PIL安装在我的虚拟环境中。但是,运行以下内容时出现错误,当我在虚拟环境外运行时,它会起作用。

Python 2.7.3 (default, Apr 16 2012, 15:47:14) 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Image
>>> im  = Image.open('test.png')
>>> im
<PngImagePlugin.PngImageFile image mode=RGBA size=28x22 at 0x7F477CFFAE18>
>>> im.convert('RGB')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/python27/lib/python2.7/site-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/Image.py", line 679, in convert
    self.load()
  File "/opt/python27/lib/python2.7/site-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/opt/python27/lib/python2.7/site-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
>>> 

2 个答案:

答案 0 :(得分:4)

您在virtualenv中使用的Python很可能是由您自己构建的,而不是系统Python - 是吗?如果是这样,那么问题是在构建Python本身时,系统中没有安装zlib的头文件(.h)。

在构建将在virtualenv上使用的Python时,必须在Linux中使用“ziplib-devel”(或等效)软件包。您可以通过从Python控制台尝试import zlib来测试它是否有效。

作为重建Python的替代方法,您可以找到系统的Python zip相关文件,并将它们复制到virtualenv中使用的Python(如果它们是相同的Python版本)。

答案 1 :(得分:0)

你可以尝试Pillow这是一个重新包装的PIL,它可以用virtualenv播放得更好。