关注Django照片应用教程时解码器JPEG不可用错误

ent*_*aul 14 python django jpeg python-imaging-library

我正在关注涉及图像上传的Django教程,并遇到了这个问题.我尝试了几次安装并重新安装PIL,libjpeg和libfreetype6,但到目前为止似乎没有任何工作.我花了几个小时试图找到解决方案,而且此时非常沮丧.请帮忙.

这是我在我的mac上重新安装PIL后selftest.py的结果:

PIL 1.1.6 BUILD SUMMARY
--------------------------------------------------------------------
version       1.1.6
platform      darwin 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43)
              [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
--------------------------------------------------------------------
--- TKINTER support ok
*** JPEG support not available
--- ZLIB (PNG/ZIP) support ok
*** FREETYPE2 support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

To check the build, run the selftest.py script.
rrdhcp-10-32-44-157:Imaging-1.1.6 pfg$ python selftest.py
*****************************************************************
Failure in example: _info(Image.open("Images/lena.jpg"))
from line #24 of selftest.testimage
Exception raised:
Traceback (most recent call last):
  File "./doctest.py", line 499, in _run_examples_inner
    exec compile(source, "<string>", "single") in globs
  File "<string>", line 1, in <module>
  File "./selftest.py", line 22, in _info
    im.load()
  File "PIL/ImageFile.py", line 180, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
  File "PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
1 items had failures:
   1 of  57 in selftest.testimage
***Test Failed*** 1 failures.
*** 1 tests of 57 failed.
Run Code Online (Sandbox Code Playgroud)

Ste*_*e K 42

PIL有几种情况可以带来类似的体验.如果您使用了virtualenv安装了PIL

pip install PIL
Run Code Online (Sandbox Code Playgroud)

那么你之前应该已经安装了libjpeg,libz 的开发版本.假设你在Ubuntu盒子上,一个

pip uninstall PIL
apt-get install libjpeg-dev zlib1g-dev libpng12-dev
pip install PIL
Run Code Online (Sandbox Code Playgroud)

应该足够了.您也可以安装Pillow而不是PIL,它可以更好地与setuptools配合使用,并且可以安装在virtualenv中.

  • 我在Mac OS X上 - 请您解释如何在终端中执行上述说明? (7认同)
  • 仅供参考,我不得不在Mac OSX 10.8上执行`pip uninstall PIL && brew install libjpeg && pip install PIL`来实现这一目的. (3认同)

小智 7

我发现这对我来说很好:

pip uninstall PIL
pip install Pillow
Run Code Online (Sandbox Code Playgroud)

然后我重新启动了服务器:

kill -HUP XXX
Run Code Online (Sandbox Code Playgroud)

其中XXX是您的服务器进程的进程ID.


Dim*_*ris 5

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

最后只需要重新安装Pillow

sudo pip uninstall Pillow
sudo pip install Pillow
Run Code Online (Sandbox Code Playgroud)