Python图像库失败,并显示消息“解码器JPEG不可用”-PIL


305

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系统中它提供了一个奇怪的错误。这个问题和答案对我有所帮助。这是一个典型的SO问题。
neves 13-10-9

我里面的PRAGMATIST和OCD表示它确实属于ServerFault,而不属于SO。但是有多少程序员遇到了这个问题?我投票将问题移至ServerFault,并在SO上保留了重定向。
FlipMcF

1
:也许你可以阅读和尝试stackoverflow.com/questions/18504835/...
凌晨

1
@dkt我在用枕头,在这里是因为我刚遇到这个问题。
Stephen Tetreault,2014年

1
@dkt我知道,我只是说问题仍然存在。
Stephen Tetreault

Answers:


488

需要libjpeg-dev才能处理带有枕头(或PIL)的jpeg,因此您需要先安装它,然后重新编译枕头。在Ubuntu 14.04上似乎还需要libjpeg8-dev

如果您仍在使用PIL,那么这些天确实应该使用枕头,因此pip uninstall PIL请先遵循以下说明进行切换,或者如果您有充分的理由坚持使用PIL,请在下面将“枕头”替换为“ 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/

然后重新安装枕头:

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

(进行编辑以包含来自评论的反馈。感谢Charles Offenbacher指出32位版本存在差异,而t-mart建议使用--no-cache-dir)。


1
问题是我有两个python软件包。一个随ubuntu一起提供,另一个属于Zope Server。不知何故,该库已损坏,因为我错误地将其安装在错误的软件包中。否则,没有问题。
拉维2012年

2
为了记录起见,那只能在x86_64上运行,我必须运行:sudo ln -s /usr/lib/i386-linux-gnu/libz.so / usr / lib /; 须藤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(已更新和维护的fork或PIL)。
Dhiraj Thakur 2014年

1
@Rolo 3小时后,您的第二个选择为我工作了,非常感谢,枕头
太笨了

5
最新版本的pip必须缓存下载的软件包及其编译。当然,这是第一次很冗长pip install,但是随后的卸载和(重新)安装速度很快。无论如何,直到我跑了,上面的方法才对我不起作用pip install --no-cache-dir pillow。祝好运!
t-mart 2015年

63

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

适用于OSX的libpng和libjpeg

因为我已经安装了PIL(通过virtualenv上的pip),所以运行:

pip uninstall PIL
pip install PIL --upgrade

decoder JPEG not available为我解决了错误。

更新(4/24/14)

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

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

有关其他信息,请参见以下答案:pip install PIL不要安装到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

升级到小牛(10.9)后,我遇到了这个问题。以下SO post为我解决了这个问题。向下滚动到@Formulka 提供的安装命令行工具注释
tatlar

如果您使用的是64位Ubuntu 12.04,请尝试zeantsoi的解决方案,我知道他是在OSX上完成的,但是我尝试了,它对我有用。
死锁

我收到此错误:无法找到任何满足pil要求的下载
RicardoGonzales 2014年

@RicardoGonzales,您可能正在运行一个pip版本,要求您传递其他标志。请查看我的答案的更新。
zeantsoi 2014年

@zeantsoi现在正在下载软件包并安装,但在“正在清除”消息之后。我得到的错误指的是:“-c import setuptools,tokenize; __ file……”有什么建议吗?
RicardoGonzales 2014年

29

这是对我有用的唯一方法。安装软件包和重新安装PIL无效。

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

sudo apt-get install libjpeg-dev

(您可能还需要安装libfreetype6 libfreetype6-dev zlib1g-dev以启用其他解码器)。

然后用枕头更换PIL:

pip uninstall PIL
pip install pillow

我前一段时间做过,突然错误今天又出现了。升级枕固定的问题:pip install pillow --upgrade
丹尼斯·哥洛马佐夫

21

以下是在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支持可用”时,表明它可以工作。

但是,如果在编辑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路径无法正常工作是因为安装了支持JPEG的PIL统计信息。但是,实际上对.jpeg图像执行pil opts会导致解码器jpeg错误。 stackoverflow.com/questions/18504835/...
卢卡斯欧阳

16

在Fedora 17上,我必须先安装libjpeg-devel然后重新安装PIL

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

1
RHEL / CentOS也是如此。
Jakub Roztocil 2014年

14

Rolo的回答非常好,但是我不得不绕过pip缓存(pip 7引入)来重新安装Pillow,否则它将无法正确地重新编译!!!该命令是:

pip install -I --no-cache-dir -v 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 (软件包管理系统)

酿造安装libjpeg

重新安装枕头(我用枕头代替PIL)

点安装-我枕头


2
这可能是由于我的brew安装问题,但是brew unlink jpeg && brew link jpeg在安装Pillow之前必须这样做。
卢卡斯2014年

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

安装这些文件并确保使用pip安装PIL,因为我是从源代码编译它的,由于某种原因它不起作用


所有必需依赖项的列表。
Paolo 2015年

9

我已经在使用Pillow并且遇到了同样的错误。尝试安装libjpeglibjpeg-dev按照其他人的建议进行安装,但被告知已经安装了(较新的)版本。

最后只需要重新安装Pillow

sudo pip uninstall Pillow
sudo pip install Pillow

3

我太新手,无法评论zeantsoi post;(。因此,这里他需要做的工作才能在10.9.1上的OSX上解决

IOError:解码器jpeg不可用

1)安装Xcode工具(打开您的终端并执行: xcode-select --install)-摘自本文:Mac OS X 10.9之后无法安装PIL

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

3)重新启动(不确定是否是强制性的)

4)使用run 重新安装PILpip install -I PIL(就像我在出现问题之前最初安装PIL一样)

希望有帮助,不要混淆更多...

_oho


2

这个问题是在很久以前发布的,而且大多数答案也很老。因此,当我花数小时试图弄清楚这一点时,没有任何效果,并且我尝试了本文中的所有建议。

尝试以Django头像形式上载JPG时,我仍然遇到标准JPEG错误:

raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available

然后,我检查了Ubuntu 12.04的存储库,发现有一些额外的软件包libjpeg。我安装了这些,问题就解决了:

sudo apt-get install libjpeg62 libjpeg62-dev

安装这些去掉libjpeg-devlibjpeg-turbo8-devlibjpeg8-dev

希望这对2015年及以后的人有所帮助!

干杯


1

同样的问题在这里,JPEG support available但是仍然得到了IOError: decoder/encoder jpeg not available,除了我使用枕头而不是PIL。

我尝试了以上所有方法,但经过多个小时,我意识到与结合使用sudo pip install不能按预期工作virtualenv。傻我

使用sudo有效在未激活virtualenv 的新外壳中启动命令(我的理解可能并不完全正确),这意味着这些软件包将安装在全局环境中。(这把事情弄糟了,我想我有2个不同的Pillow安装。)

我清理了所有内容,将用户更改为root,然后将其重新安装在virtualenv中,现在可以使用了。
希望这会帮助某人!


1

对于Fedora

安装必备组件
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
现在安装枕头

sudo pip install pillow

注意-对于libjpeg和zlib,我们在Fedora / CentOS / Red Hat 中安装libjpeg-develzlib-devel软件包。


0

首先,除了卸载Python之外,我还必须删除隐藏文件夹user / appData中的python文件夹(这很麻烦)。然后,我安装了WinPython发行版:http : //code.google.com/p/winpython/,其中包含PIL


4
Windows下的Python开发非常痛苦。我建议不要。
eviltnan

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.