305

PIL 在我的系统中支持 JPEG。

每当我进行上传时,我的代码都会失败:

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

我该如何解决这个问题?

4

15 回答 15

493

libjpeg-dev 需要能够处理带有pillow(或PIL)的jpeg,因此您需要安装它然后重新编译pillow。在 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)。

于 2012-04-11T16:22:59.377 回答
64

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

用于 OSX 的 libpng 和 libjpeg

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

pip uninstall PIL
pip install PIL --upgrade

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

更新(2014 年 4 月 24 日)

较新版本的 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
于 2012-10-30T16:32:25.883 回答
29

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

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

sudo apt-get install libjpeg-dev

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

然后用枕头替换 PIL:

pip uninstall PIL
pip install pillow
于 2013-06-04T11:36:37.593 回答
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 支持可用”时,这意味着它可以工作。

但是,如果在编辑 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/

然后,终于,它起作用了!

于 2013-06-04T02:03:19.913 回答
17

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

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
于 2013-02-03T17:35:30.357 回答
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) 安装了所需的库

于 2015-06-13T18:16:02.987 回答
12

在 Mac OS X Mavericks (10.9.3) 上,我通过执行以下操作解决了这个问题:

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

冲泡安装libjpeg

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

pip install -I 枕头

于 2014-06-05T20:16:19.883 回答
11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

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

于 2014-11-05T11:09:25.737 回答
9

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

最后只需要重新安装Pillow

sudo pip uninstall Pillow
sudo pip install Pillow
于 2014-08-20T13:34:07.423 回答
3

我太新手了,无法评论 zeantsoi 帖子;(。所以这是我需要做的,以在 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)运行重新安装PILpip install -I PIL(因为我在出现问题之前最初安装了PIL)

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

_oho

于 2014-02-28T09:27:19.743 回答
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-dev、 和libjpeg8-dev

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

干杯

于 2015-06-05T18:55:43.657 回答
1

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

我尝试了以上所有方法以及更多方法,但经过几个小时后,我意识到 usingsudo pip installvirtualenv. 傻我。

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

我清理了东西,将用户更改为root并重新安装在virtualenv中,现在它可以工作了。
希望这会对某人有所帮助!

于 2013-09-16T20:02:55.343 回答
1

对于 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软件包

于 2016-04-13T10:07:20.600 回答
0

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

于 2013-02-05T22:51:22.017 回答
0

对于那些在 Mac OS Mountain Lion 上的人,我遵循了 zeantsoi 的 anwser,但它不起作用。

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

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

于 2013-07-24T20:51:06.820 回答