如何在Ubuntu 11.04上安装PIL?
我在网上看到很多人问这个问题,我也试过各种方法,但就是无法让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 个回答
试着从头开始重新安装:
找到路径 lib/pythonXX/site-packages/PIL,删除这个文件夹以及文件 PIL.pth。这样可以彻底移除这个包。
解压你下载的 *tar.gz 文件里的 PIL 安装文件。
像之前那样,用 add_directory(...) 添加你的 jpeg 库所在的目录。 (可以用 ldconfig -P | grep jpeg 来查找库的位置)。
重新运行 python setup.py build,然后运行 python setup.py install。测试一下。
我的经验是:
如果不执行第二步,就不会重新构建这个包。 不执行第三步是根本原因。 不执行第一步可能也有影响。
这似乎是 PIL 安装中的一个 bug,而不是 Ubuntu 或其他发行版的包结构问题。
顺便说一下:在一个系统上安装多个 Python 版本是很常见的,这就需要手动安装包。有些人会同时有 2.x 和 3.x 版本用于实验,某些共享主机有 2.5 版本,而应用程序需要 2.7 版本,这只是两个例子。
我在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
和往常一样,使用包管理器:
sudo apt-get install python-imaging
它会为你处理所有事情。你可以在这个链接上找到相关的包。
在任何Linux系统上手动安装软件都是浪费时间,除非你找不到相关的包。包的维护者会花时间确保这个包能正常工作并正确安装,没必要重复他们的工作。特别是手动安装后,你就失去了包的好处,比如自动更新、方便卸载等等……