如何在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错误。

我在我的智慧结束。 还有什么我可能错过了?

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

这是我做什么来testing如果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 >>> 

一如既往,使用包管理器:

 sudo apt-get install python-imaging 

它会为你处理这一切。 包是可用的。

在任何Linux发行版中手动安装都是一种浪费,除非软件包真的不存在。 程序包维护人员花时间确保程序包正常工作和安装,没有意义重复他们的努力。 特别是不要手动安装的东西,然后没有一个包的优势 – 没有自动更新,不容易删除等…

我已经成功地在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 

尝试从头重新安装:

  1. 找到lib / pythonXX / site-packages / PIL。 删除所有这个目录以及文件PIL.pth。 这应该完全删除te包。

  2. 从您下载的* tar.gz中解压缩PIL安装文件。

  3. 使用add_directory(…)添加jpeg库所在的目录,就像以前一样。 (使用ldconfig -P | grep jpeg查找库的位置)。

  4. 重试python setup.py build,然后python setup.py install。 测试它。

我的经历是:

不执行第2步没有重建包。 不执行步骤3是根本原因。 不执行步骤1可能起了一部分作用。

这似乎是PIL安装中的一个错误,而不是在Ubuntu或任何发行版的包结构中。

只是为了记录:在一个系统上安装多个Python版本是很常见的,这使得需要手动安装软件包。 有些人有一个3.x的2.x实验,共享主机有2.5s和应用程序需要2.7,只是举两个例子。

在Ubuntu上安装requirements.txt时,我发现它是以上两者的组合。 我使用Vagrant来运行厨师脚本,并发现这种方法对我来说最合适:

首先,我使用bash脚本来设置PIL:

 #!/usr/bin/env bash sudo apt-get build-dep python-imaging sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/ 

接下来,在requirements.txt安装期间,文件的顶部如下所示:

 --allow-external PIL --allow-unverified PIL Django==1.5.4 PIL==1.1.7 ... 

当然,这是一个不安全的方式,但是可以用于开发和快速构建。 对于生产,最好手动下载和验证所有软件包,并从本地托管的存储库安装它们。