Python 图像库因消息“解码器 JPEG 不可用”而失败 - PIL

Posted

技术标签:

【中文标题】Python 图像库因消息“解码器 JPEG 不可用”而失败 - PIL【英文标题】:Python Image Library fails with message "decoder JPEG not available" - PIL 【发布时间】:2012-02-13 11:26:57 【问题描述】:

PIL 在我的系统中确实支持 JPEG。

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

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

我该如何解决这个问题?

【问题讨论】:

这是一个有效的问题。 PIL 是一个著名的 Python 库,它在一些 linux 系统中给出了一个奇怪的错误。这个问题和答案对我有帮助。这是一个典型的 SO 问题。 我的实用主义者和强迫症说它确实属于 ServerFault,而不是 SO。但是有多少程序员遇到过这个问题?我投票将问题移至 ServerFault,并在 SO 上保留重定向。 也许你可以读一读并尝试一下:***.com/questions/18504835/… @dkt 我正在使用枕头,因为我刚刚遇到了这个问题。 @dkt 我知道,我只是说问题仍然存在。 【参考方案1】:

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

(编辑以包含来自 cmets 的反馈。感谢 Charles Offenbacher 指出这与 32 位不同,以及 t-mart 建议使用 --no-cache-dir)。

【讨论】:

问题是我有两个 python 包。一个与 ubuntu 一起提供,另一个属于 Zope Server。不知何故,该库已损坏,因为我错误地将其安装在错误的软件包中。否则,没有问题。 作为记录,仅适用于 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/ 对于刚开始使用 PIL 的任何人都应该注意它已经过时并且不再真正维护。如果您想在项目中使用图像,请使用 PILLOW 更新和维护的 fork 或 PIL。 @Rolo 3 小时后,你的第二个选项对我有用,谢谢,枕头太笨了 最新版本的 pip 必须缓存下载的包及其编译。当然,第一次pip install 的事情很长,但随后的卸载和(重新)安装速度非常快。 无论如何,在我运行pip install --no-cache-dir pillow 之前,上述方法对我不起作用。祝你好运!【参考方案2】:

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

libpng & libjpeg for OSX

因为我已经安装了 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 comments below:

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

【讨论】:

我在升级到 Mavericks (10.9) 后遇到了这个问题。以下SO post 为我解决了这个问题。向下滚动到@Formulka 的安装命令行工具评论 如果你使用的是 Ubuntu 12.04 64 位,试试 zeantsoi 的解决方案,我知道他是为 OSX 做的,但我试过了,对我有用。 我收到了这个错误:找不到任何满足pil要求的下载 @RicardoGonzales,您可能在 pip 版本上运行,需要您传递额外的标志。请查看我的答案的更新。 @zeantsoi 现在正在下载包并安装,但在“清理”消息之后。我得到的错误指的是:“-c import setuptools, tokenize;__file ...”有什么建议吗?【参考方案3】:

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

在 ubuntu 上,安装所需的包:

sudo apt-get install libjpeg-dev

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

然后用枕头替换PIL:

pip uninstall PIL
pip install pillow

【讨论】:

我前段时间做了这个,今天突然又出现了错误。升级枕头修复问题:pip install pillow --upgrade.【参考方案4】:

以下作品在 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 错误。 ***.com/questions/18504835/… 给大家的提示,libjpeg-dev必须安装之前枕头安装。【参考方案5】:

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

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

【讨论】:

RHEL/CentOS 也是如此。【参考方案6】:

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 选项也帮助了我【参考方案7】:

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

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

brew 安装 libjpeg

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

pip install -I 枕头

【讨论】:

这可能是由于我安装 brew 的另一个问题,但在安装 Pillow 之前我必须brew unlink jpeg && brew link jpeg【参考方案8】:
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

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

【讨论】:

所有必需dependencies的列表。【参考方案9】:

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

最后只需要重新安装Pillow

sudo pip uninstall Pillow
sudo pip install Pillow

【讨论】:

【参考方案10】:

我太新手了,无法评论 zeantsoi 帖子 ;(。所以这是我在 10.9.1 上解决 OSX 所需要做的事情

IOError:解码器 jpeg 不可用

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) 重新安装 PIL 并运行 pip install -I PIL(因为我在遇到问题之前最初安装了 PIL)

希望得到帮助,不要再混淆了......

_oho

【讨论】:

【参考方案11】:

这个问题是很久以前发布的,大多数答案也很老了。所以当我花了几个小时试图解决这个问题时,没有任何效果,我尝试了这篇文章中的所有建议。

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

干杯

【讨论】:

【参考方案12】:

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

我尝试了以上所有方法以及更多方法,但在 许多 小时后,我意识到将 sudo pip installvirtualenv 结合使用并不能达到我的预期。傻我。

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

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

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

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

【讨论】:

windows下Python开发很痛苦。我建议不要。【参考方案15】:

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

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

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

【讨论】:

以上是关于Python 图像库因消息“解码器 JPEG 不可用”而失败 - PIL的主要内容,如果未能解决你的问题,请参考以下文章

Python Django 在脚本和图像上返回 400 条 GET 消息

Selenium Python - 单击图像链接出错:消息:元素不可见

Discord Python Bot - Bot 的消息不会自动嵌入链接/图像/等

Python:带图片的 Mime 消息

Python脚本图像保存目录/文件名错误

如何使用 ROS 2 在 python 节点中发布批量图像?