如何在Ubuntu 11.04上安装PIL?

10 投票
4 回答
14669 浏览
提问于 2025-04-17 12:45

我在网上看到很多人问这个问题,我也试过各种方法,但就是无法让PIL正常工作。

我尝试通过以下方式来链接zlib、jpeg等库:

sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/

我还编辑了setup.py文件,添加了这一行:

add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu")

实际上,运行$ sudo python setup.py install时显示JPEG、ZLIB/PNG等支持是可用的。(我在为2.5和2.7安装,但都不行)

sudo python2.5 setup.py install
running install
running build
running build_py
running build_ext
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.5.6 (r256:88840, Feb  1 2012, 15:55:08)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available

但是经过这些努力,我还是遇到了decoder %s not available的错误。

我真的是快要崩溃了。还有什么我可能遗漏的地方吗?

我的环境是:64位的Ubuntu 11.04,在VirtualBox虚拟机中运行。

这是我用来测试PIL是否正常工作的方法:

$ python
>>> from PIL import Image
>>> im = Image.open("photo.jpg")
>>> im.rotate(45)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1359, in rotate
  self.load()
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load
  d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder
  raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
>>> 

4 个回答

1

试着从头开始重新安装:

  1. 找到路径 lib/pythonXX/site-packages/PIL,删除这个文件夹以及文件 PIL.pth。这样可以彻底移除这个包。

  2. 解压你下载的 *tar.gz 文件里的 PIL 安装文件。

  3. 像之前那样,用 add_directory(...) 添加你的 jpeg 库所在的目录。 (可以用 ldconfig -P | grep jpeg 来查找库的位置)。

  4. 重新运行 python setup.py build,然后运行 python setup.py install。测试一下。

我的经验是:

如果不执行第二步,就不会重新构建这个包。 不执行第三步是根本原因。 不执行第一步可能也有影响。

这似乎是 PIL 安装中的一个 bug,而不是 Ubuntu 或其他发行版的包结构问题。

顺便说一下:在一个系统上安装多个 Python 版本是很常见的,这就需要手动安装包。有些人会同时有 2.x 和 3.x 版本用于实验,某些共享主机有 2.5 版本,而应用程序需要 2.7 版本,这只是两个例子。

2

我在Ubuntu 12.04上成功重新安装了PIL,方法如下:

pip uninstall PIL
apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
pip install -U PIL

重新安装PIL后,已经不再出现 IOError: decoder zip not available 这个错误了。之前我遇到的错误信息是:

Traceback (most recent call last):
  File "convert_image.py", line 15, in <module>
    image.save('output.png')
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1406, in save
    self.load()
  File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder zip not available
12

和往常一样,使用包管理器:

sudo apt-get install python-imaging

它会为你处理所有事情。你可以在这个链接上找到相关的包。

在任何Linux系统上手动安装软件都是浪费时间,除非你找不到相关的包。包的维护者会花时间确保这个包能正常工作并正确安装,没必要重复他们的工作。特别是手动安装后,你就失去了包的好处,比如自动更新、方便卸载等等……

撰写回答