【问题标题】:How to install PIL in Ubuntu 11.04?如何在 Ubuntu 11.04 中安装 PIL?
【发布时间】:2012-02-10 09:28:06
【问题描述】:

我看到整个互联网上都在问这个问题,我已经尝试过全部关注,但我仍然无法让 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
>>> 

【问题讨论】:

  • 你为什么不用包管理器安装 python-imaging ?
  • 我没想到。另外,我不知道包名。

标签: python ubuntu python-imaging-library


【解决方案1】:

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

sudo apt-get install python-imaging

它会为你处理这一切。 packages 可用。

在任何 Linux 发行版中手动安装都是徒劳的,除非软件包真的不存在。包维护者花时间确保包正常工作和安装,重复他们的努力是没有意义的。尤其是不要手动安装那些不具备软件包优势的东西——没有自动更新、不容易删除等......

【讨论】:

  • 刚试了下,还是出现解码器错误。我的摆弄是不是把事情搞砸了?我已经删除了site-packages/PIL 文件。另外,如何为 both 2.5 和 2.7 安装它? (Google App Engine 为 2.5)
  • 什么时候出现这个错误?这听起来不像是导入错误——如果不是,你的问题不是安装,而是在 PIL 或其依赖项中。这可能是软件包的错误,如果是这样 - 您应该提交错误报告。至于 2.5,我不知道 Ubuntu 是如何处理旧版本软件的,所以我恐怕无法为你解答。
  • 我更新了原始帖子,看看我如何测试它是否正常工作。基本上,我打开一个图像,然后旋转它。旋转它使用解码器,这就是我得到错误的地方。
  • @john2x 看来 Ubuntu 软件包确实有问题:ubuntuforums.org/showthread.php?t=1751455
【解决方案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

【讨论】:

    【解决方案3】:

    尝试从头开始重新安装:

    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 版本是很常见的,这使得必须手动安装包。有些人有 2.x 和 3.x 用于试验,共享主机有 2.5s,应用程序需要 2.7,仅举两个例子。

    【讨论】:

      【解决方案4】:

      在 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
      ...
      

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

      【讨论】:

        猜你喜欢
        • 2012-08-11
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多