Python PIL 无法找到我的 "libjpeg"

10

我无法使用PIL,因为它找不到我的libjpeg库!

首先,我安装了默认的PIL。当我运行selftest.py时,它给了我以下信息:

IOError: decoder jpeg not available 1
items had failures:    1 of  57 in
selftest.testimage
***Test Failed*** 1 failures.
*** 1 tests of 57 failed.

然后,我按照网上的指示更改了PIL的setup.py文件。
JPEG_ROOT = "/usr/lib"

因为当我查找 libjpeg 时,会得到以下结果:
locate libjpeg 
/usr/lib/libjpeg.so.62
/usr/lib/libjpeg.so.62.0.0
/usr/lib64/libjpeg.so.62
/usr/lib64/libjpeg.so.62.0.0
/usr/share/doc/libjpeg-6b
/usr/share/doc/libjpeg-6b/README
/usr/share/doc/libjpeg-6b/usage.doc
/var/cache/yum/base/packages/libjpeg-6b-37.i386.rpm
/var/cache/yum/base/packages/libjpeg-6b-37.x86_64.rpm

因此,我再次运行了setup.py install...并运行了selftest.py。 但我仍然遇到了相同的错误!

5个回答

18

您需要安装至少3个标题集。如果您想处理Tiff文件,则还需要安装1个标题集。

freetype、libjpeg和zlib都包含在CentOS下列软件包中:

== 32位: zlib-devel.i386 libjpeg-devel.i386 freetype-devel.i386

== 64位: zlib-devel.x86_64 libjpeg-devel.x86_64 freetype-devel.x86_64

与之前一样,您需要编辑setup.py文件中的以下变量:

FREETYPE_ROOT JPEG_ROOT ZLIB_ROOT

将这些值设置为基于您平台的/usr/lib或/usr/lib64。完成后,您很可能会想运行

python setup.py build --force
python setup.py install

这将强制重新构建所有与PIL相关的库,并以原始方式重新安装它们。


谢谢!顺便说一下,这是我在64位系统上所做的:sudo yum install zlib-devel.x86_64 libjpeg-devel.x86_64 freetype-devel.x86_64 然后 sudo pip install pil (这需要您已经安装了pip软件包管理器)。 - DPlusV

3

我有同样的问题。在我的情况下,我需要设置:

JPEG_ROOT="/usr/lib64/"

改为:

JPEG_ROOT="/usr/lib/"

祝你好运。


3
您不仅需要安装libjpeg库本身,还需要安装其头文件。这些包通常被命名为以headers或dev结尾的内容,具体取决于您所使用的发行版。请务必确认都已经正确安装。

我该如何获取头文件? 我使用的是CentOS发行版。 我执行了“locate libjpeg”命令,但没有找到以“.headers”结尾的任何内容。 - TIMEX
2
它们在CentOS上似乎被称为libjpeg-devel。 - Lennart Regebro
使用“软件包管理工具”安装libjpeg-devel。请注意,您可能需要安装其他格式的-devel软件包,例如libpng-devel - bobince
我记得PIL使用zlib来处理PNG,但是我可能记错了。不过它有文档可以查看。 :) - Lennart Regebro
yum安装libjpeg-devel -这对我解决了问题 - PhoebeB

1
你可以尝试使用Pillow代替PIL。
Pillow是PIL的一个分支,旨在“促进PIL的积极发展”。在版本1.7.0和1.7.1中,他们进行了一些更改以支持多架构(请参见changelog)。

与Pillow相同的问题;(并且解决方案JPEG_ROOT="/usr/lib64/"对于Pillow没有帮助。 - Dima Lituiev

0
今天我遇到了同样的问题,但我找到了解决方法。基本上它涉及到删除PIL,通过Fink安装lipjpeg并重新安装PIL。
我写了一篇文章,详细介绍了如何逐步操作。如果感兴趣,请查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接