PIL在我的系统中支持JPEG。
每当我做一个上传,我的代码失败:
File "PIL/Image.py", line 375, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
我该如何解决这个问题?
PIL在我的系统中支持JPEG。
每当我做一个上传,我的代码失败:
File "PIL/Image.py", line 375, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
我该如何解决这个问题?
当前回答
对于那些在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
其他回答
libjpeg-dev需要能够使用pillow(或PIL)处理jpeg,因此您需要安装它,然后重新编译pillow。在Ubuntu 14.04上似乎也需要libjpeg8-dev
如果你仍然在使用PIL,那么你现在应该使用pillow,所以在按照这些说明切换之前,首先卸载PIL,或者如果你有一个很好的理由坚持使用PIL,那么将“pillow”替换为“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
如果这不起作用,试试下面的一个,这取决于你的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)。
下面是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/
然后,终于,它工作了!!
对于那些在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中,现在它可以工作了。 希望这能帮助到一些人!
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)安装了所需的库