PIL在我的系统中支持JPEG。

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

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

我该如何解决这个问题?


当前回答

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

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

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

其他回答

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

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

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

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

sudo apt-get install libjpeg-dev

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

然后将PIL替换为pillow:

pip uninstall PIL
pip install pillow

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

OSX的libpng & libjpeg

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

pip uninstall PIL
pip install PIL --upgrade

这解决了解码器JPEG不可用的错误。

更新(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

同样的问题在这里,JPEG支持可用,但仍然得到IOError:解码器/编码器JPEG不可用,除了我使用枕头而不是PIL。

我尝试了以上所有方法和更多方法,但经过几个小时后,我意识到使用sudo pip install与virtualenv结合使用并不能像我预期的那样工作。愚蠢的我。

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

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

下面是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。所以我编辑~/。将以下代码添加到该文件中:

编辑:export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/

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