Python 图像库出现“decoder JPEG not available”错误信息 - PIL

306
PIL在我的系统中支持JPEG格式。每当我上传时,我的代码都会失败并显示以下信息:
File "PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

我该如何解决这个问题?


22
这是一个合理的问题。PIL是一款著名的Python库,在某些Linux系统中会出现奇怪的错误。这个问题和答案帮助了我。这是一个典型的stackoverflow问题。 - neves
1
也许你可以阅读并尝试一下这个链接:https://dev59.com/I2Ml5IYBdhLWcg3wTlnY#20091508 - Wee
1
@dkt 我正在使用Pillow,因为我刚遇到了这个问题。 - Stephen Tetreault
@SMT:在这种情况下,请使用下面的优秀答案,我只是想告知新手有关pillow的信息。 - Dhiraj Thakur
1
@dkt 我知道,我只是在说问题仍然存在而已。 - Stephen Tetreault
显示剩余4条评论
15个回答

494

需要安装libjpeg-dev才能使用pillow(或PIL)处理JPEG图像,因此您需要安装它,然后重新编译pillow。在Ubuntu 14.04上还需要安装libjpeg8-dev。

如果您仍在使用PIL,则现在应该使用pillow,因此在按照以下说明切换之前,首先运行pip uninstall PIL,或者如果有充分理由坚持使用PIL,则在下面的说明中将"pillow"替换为"PIL"。

在Ubuntu上:

# install libjpeg-dev with apt
sudo apt-get install libjpeg-dev
# if you're on Ubuntu 14.04, also install this
sudo apt-get install libjpeg8-dev

# reinstall pillow
pip install --no-cache-dir -I pillow

如果那个方法行不通,可以尝试以下两个方法之一,具体取决于您使用的是 64 位还是 32 位 Ubuntu。

对于 Ubuntu x64:

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
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

或者对于Ubuntu 32位:

sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib/

然后重新安装 Pillow:

pip install --no-cache-dir -I pillow

(包含评论反馈的编辑。感谢Charles Offenbacher指出这在32位上有所不同,感谢t-mart建议使用--no-cache-dir。)。


1
问题在于我有两个Python软件包。一个是随Ubuntu一起提供的,另一个属于Zope服务器。由于我错误地将其安装在错误的软件包中,所以该库被损坏了。否则,没有问题。 - Ravi
2
仅供参考,这仅适用于x86_64,我必须运行:sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib/; sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/; sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/; - Charles Offenbacher
2
对于刚开始使用PIL的人来说,应该注意到它已经过时并且不再得到维护。如果你想在项目中处理图像,请使用PILLOW,它是PIL的一个更新和维护的分支。 - Dhiraj Thakur
6
pip的最新版本必须缓存已下载的软件包及其编译结果。第一次运行pip install可能会很慢,但是后续的卸载和重新安装则会异常迅速。总之,我尝试了上述方法,但直到我运行了pip install --no-cache-dir pillow才成功。祝好运! - t-mart
1
目前,使用apt-get install libjpeg-dev命令也会安装libjpeg8-dev。 - Berk
显示剩余10条评论

64

对于使用OSX的用户,我使用以下二进制文件在系统范围内安装了libpng和libjpeg:

OSX的libpng和libjpeg

由于我已经通过虚拟环境上的pip安装了PIL,所以我运行了:

pip uninstall PIL
pip install PIL --upgrade

对我来说,这解决了解码器JPEG不可用的错误。

更新(4/24/14)

新版本的pip需要额外的标志才能从外部源下载库(包括PIL)。尝试以下操作:

pip install PIL --allow-external PIL --allow-unverified PIL

请查看以下答案以获取更多信息:pip install PIL dont install into virtualenv

更新2:

如果您使用的是OSX Mavericks,则需要设置ARCHFLAGS标志,如下所示@RicardoGonzales 在下面的评论中提到

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL

我在升级到Mavericks(10.9)后遇到了这个问题。以下SO帖子为我解决了这个问题。向下滚动到@Formulka的install command line tools评论。 - tatlar
如果你使用的是Ubuntu 12.04 64位系统,可以尝试使用zeantsoi的解决方案。我知道他是为OSX设计的,但我尝试过了,对我也有效。 - deadlock
我得到了这个错误:无法找到任何满足pillow需求的下载。 - napstercake
在经过大量搜索后,我在Ubuntu上终于找到了解决方法。我使用easyinstall安装了PIL和pip安装了pillow在虚拟环境中,但无法让它们正常工作。但是使用命令“pip install PIL --allow-external PIL --allow-unverified PIL”之后,问题得以解决。谢谢! - Packet Tracer
在我使用Yosemite操作系统上,它对我不起作用,我遇到了_imagingft.c:73:10:致命错误:找不到“freetype/fterrors.h”文件。 - DataGreed
显示剩余3条评论

29

这是唯一对我有效的方法。安装软件包并重新安装PIL都没有起作用。

在Ubuntu上,安装所需的软件包:

sudo apt-get install libjpeg-dev

(你可能还想安装libfreetype6 libfreetype6-dev zlib1g-dev来启用其他解码器.)

然后使用Pillow替换PIL:

pip uninstall PIL
pip install pillow

我之前做过这个,但今天突然出现了错误。升级pillow解决了问题:pip install pillow --upgrade - Dennis Golomazov

22

以下方法在Ubuntu 12.04上可行:

pip uninstall PIL
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
pip install PIL --upgrade
当你看到“-- JPEG support available”时,它意味着它可以工作。但是,如果在编辑JPEG图像时仍然无法正常工作,请检查Python路径!我的Python路径缺少“/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/”,所以我编辑了“~/.bashrc”并在该文件中添加了以下代码:
编辑:export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/ 然后,最后,它可以工作了!

嗨,我认为我遇到了一个问题,Python路径不起作用,因为安装PIL表明--JPEG支持是可用的。然而,使用.jpeg图像进行pil opts实际上会导致解码器jpeg错误。https://dev59.com/I2Ml5IYBdhLWcg3wTlnY - Lucas Ou-Yang
给大家一个专业提示,安装Pillow之前必须先安装libjpeg-dev。 - Kurt

17

在 Fedora 17 上,我需要安装 libjpeg-devel 并且随后重新安装 PIL

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL

1
对于RHEL/CentOS也是一样。 - Jakub Roztocil

14

Rolo的回答非常好,不过我必须通过绕过pip缓存(在pip 7中引入)重新安装Pillow,否则它将无法正确地重新编译!!! 命令如下:

pip install -I --no-cache-dir -v Pillow

你可以通过阅读日志来判断Pillow是否已经正确配置,例如:

PIL SETUP SUMMARY
    --------------------------------------------------------------------
    version      Pillow 2.8.2
    platform     linux 3.4.3 (default, May 25 2015, 15:44:26)
                 [GCC 4.8.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    *** OPENJPEG (JPEG2000) support not available
    --- ZLIB (PNG/ZIP) support available
    --- LIBTIFF support available
    --- FREETYPE2 support available
    *** LITTLECMS2 support not available
    *** WEBP support not available
    *** WEBPMUX support not available
    --------------------------------------------------------------------

正如您所看到的,支持JPG,TIFF等格式,因为我之前通过apt安装了所需的库(libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)。


谢谢。--no-cache-dir选项也帮了我。 - dranxo

12

在Mac OS X Mavericks(10.9.3)上,我通过以下方法解决了这个问题:

使用brew(包管理系统)安装libjpeg

brew install libjpeg

重新安装pillow(我使用pillow代替PIL)

pip install -I pillow


2
这可能是由于我安装brew时出现了单独的问题,但在安装Pillow之前,我不得不执行brew unlink jpeg && brew link jpeg - Lucas

11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

安装这些软件并确保使用pip安装PIL,因为我从源代码编译它时出现了一些问题。


所有所需的依赖项清单。 - Paolo

9

我之前已经在使用Pillow,但是遇到了相同的错误。 尝试安装libjpeg或者libjpeg-dev,如其他人所建议的,但是被告知已经安装了(更新的)版本。

最后解决问题只需要重新安装Pillow即可:

sudo pip uninstall Pillow
sudo pip install Pillow

3

我太新手了,无法评论zeantsoi的帖子。所以这里是我在OSX 10.9.1上解决以下错误的步骤:

IOError: decoder jpeg not available

1)安装Xcode工具(打开终端并执行:xcode-select --install)- 参考自这篇文章:Can't install PIL after Mac OS X 10.9

2)从此链接中安装libpng和libjpeg软件包(组合安装程序):http://ethan.tira-thompson.com/Mac_OS_X_Ports.html

3)重新启动(不确定是否必须)

4)使用运行 pip install -I PIL 重新安装PIL(因为我最初在出现问题之前已经安装了PIL)

希望这可以帮到你,不要让你更加困惑...

_oho


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