Python图像库失败,消息“解码器JPEG不可用”——公益诉讼

PIL在我的系统中支持JPEG。

每当我做一个上传,我的代码失败:

File "PIL/Image.py", line 375, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

我该如何解决这个问题?

157409 次浏览

libjpeg-dev需要能够使用pillow(或PIL)处理jpeg,因此您需要安装它,然后重新编译pillow。在Ubuntu 14.04上似乎也需要libjpeg8-dev

如果你还在使用PIL,那么你现在真的应该使用pillow,所以在按照这些说明切换之前pip uninstall PIL,或者如果你有一个很好的理由坚持使用PIL,那么在下面用“PIL”替换“pillow”)。

在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

如果这不起作用,试试下面的一个,这取决于你的Ubuntu是64位还是32位。

对于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 32bit:

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)。

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

libpng &libjpeg for OSX

因为我已经安装了PIL(通过pip on a virtualenv),我运行:

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安装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

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

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

首先,除了卸载python,我还必须删除隐藏文件夹user/appData中的python文件夹(这造成了巨大的麻烦)。然后我安装了WinPython Distribution: http://code.google.com/p/winpython/,其中包括PIL

下面是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/

然后,终于,它工作了!!

这是唯一对我有效的方法。安装包和重新安装PIL都不起作用。

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

sudo apt-get install libjpeg-dev

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

然后将PIL替换为pillow:

pip uninstall PIL
pip install pillow

对于那些使用Mac OS Mountain Lion的人,我使用zeantsoi的答案,但它不起作用。

我最终得到了这篇文章的解决方案:http://appelfreelance.com/2010/06/libjpeg-pil-snow-leopard-python2-6-_jpeg_resync_to_restart/

现在,我很高兴地运行我的jpeg脚本!

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

我尝试了以上所有的方法,但在许多小时后,我意识到使用sudo pip installvirtualenv结合使用并不像我预期的那样工作。愚蠢的我。

使用sudo有效地在新shell (我对此的理解可能不完全正确)中启动命令,其中virtualenv未被激活,这意味着包将被安装在全局环境中。(这把事情搞砸了,我想我有2个不同的枕头安装。)

我清理了东西,将用户更改为root并重新安装在virtualenv中,现在它可以工作了。
希望这能帮助到一些人!< / p >

我太新手了,不能评论zeantsoi的帖子。所以这里是我需要做的解决在OSX上10.9.1的

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) 重新安装公益诉讼与运行pip install -I PIL(因为我最初安装PIL之前有问题)

希望这对你有所帮助,不要再困惑了…

_oho

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

通过酿造安装libjpeg(包管理系统)

编译libjpeg

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

pip安装-I枕

我已经使用Pillow并得到相同的错误。 尝试按照其他人的建议安装libjpeglibjpeg-dev,但被告知已经安装了(更新的)版本

最后只需要重新安装Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

安装这些并确保使用pip安装PIL,因为我从源代码编译了它,由于某种原因它无法工作

这个问题是很久以前发布的,大多数答案也很老了。所以当我花了几个小时试图弄清楚这个问题时,什么都没用,我尝试了这篇文章中的所有建议。

当我试图在我的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年及以后的人们有所帮助!

干杯

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)安装了所需的库

对于Fedora

安装前置条件
sudo DNF install make automake GCC GCC -c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
现在安装Pillow

sudo pip install pillow

注意:对于libjpeg和zlib,我们在Fedora/CentOS/Red Hat中安装了libjpeg-develzlib-devel