2012-02-10 109 views
10

我在互联网上看到了这个问题,我尝试了全部跟踪,但仍然无法让PIL工作。如何在Ubuntu 11.04中安装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

这就是我做的测试,如果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 
>>> 
+0

为什么不使用包管理器安装python-imaging? – mkriheli 2012-02-10 09:32:43

+0

没有跨过我的脑海。另外,我不知道包名。 – john2x 2012-02-10 10:04:38

回答

12

像往常一样,使用软件包管理器:

sudo apt-get install python-imaging 

它会处理这一切为您服务。 packages可用。

在任何Linux发行版中手动安装都是浪费功夫,除非软件包真的不存在。程序包维护人员花时间确保程序包正常工作和安装,没有意义重复他们的努力。尤其是不要手动安装的东西,那么没有一个包的优势 - 没有自动更新,无需拆卸方便,等...

+0

刚刚尝试过,但仍然收到解码器错误。莫名其妙地弄乱了它吗?我已经删除了'site-packages/PIL'文件。另外,如何安装它* * 2.5和2.7? (对于Google App Engine 2.5) – john2x 2012-02-10 10:03:21

+0

你什么时候收到这个错误?这听起来不像是一个导入错误 - 如果不是,你的问题不是安装,而是在PIL或它的依赖关系中。这可能是该软件包的一个错误,如果是这样 - 你应该提交一个错误报告。至于2.5,我不确定Ubuntu如何处理旧版本的软件,所以恐怕我无法为你回答这个问题。 – 2012-02-10 10:10:01

+0

我更新了原文,看看我如何测试它是否正常工作。基本上,我打开一个图像,并旋转它。旋转它使用解码器,这就是我得到错误的地方。 – john2x 2012-02-10 10:15:49

1

尝试从头开始重新安装:

  1. 查找LIB/pythonXX /站点包/ 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版本是很常见的,这使得需要手动安装软件包。有些人有2.x用于实验,共享主机有2.5s,应用程序需要2.7,仅举两个例子。

2

我已经成功地重新安装PIL在Ubuntu 12.04是这样的:

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 
0

我发现它是在Ubuntu上安装带有requirements.txt的上述两者的组合。我使用的是流浪运行厨师脚本,发现这种方法最适合我:

首先,我使用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 
... 

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