PIL不会导入_imaging C模块:“***未安装_imaging C模块”

时间:2010-11-06 12:38:48

标签: python django ubuntu python-imaging-library imaging

来自PIL setup.py构建的一些背景知识:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
              [GCC 4.3.3]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------

这是在Ubuntu 9.04安装上。

我只需要PIL来启用Django上传和调整各种图像(不同格式)的大小。不幸的是,它目前无法处理JPEG。在执行PIL的selftest.py之后,它想出了这个:

*** The _imaging C module is not installed

我尝试使用python -v解释器导入Image和_imaging(两者都有效)......

>>> from PIL import Image
import PIL # directory PIL
# PIL/__init__.pyc matches PIL/__init__.py
import PIL # precompiled from PIL/__init__.pyc
# PIL/Image.pyc matches PIL/Image.py
import PIL.Image # precompiled from PIL/Image.pyc

[继续成功了很长一段时间]

>>> import _imaging
dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imaging.so", 2);
import _imaging # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imaging.so

因此在使用python解释器时可以使用_imaging,但由于某些原因,在其他情况下没有正确导入。

在过去的几个小时里,我一直在寻找这个问题的解决方案,并且没有找到更接近的问题。我错过了一些愚蠢明显的东西吗?或者有什么想法,为什么它不起作用?

提前致谢!

另外:我知道http://effbot.org/zone/pil-imaging-not-installed.htm,但这只是演示了错误并且没有提供任何解决方案。

编辑:我一直在窥探,似乎导入_imagingmath就是问题所在。我做了python -vv selftest.py来查看它的破坏位置,这就是它发生的原因:

dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so", 2);
import _imagingmath # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so
*** The _imaging C module is not installed
# clear __builtin__._
[etc. etc. etc.]

3 个答案:

答案 0 :(得分:5)

似乎在我安装PIL之前,我没有安装libjpeg。因此我安装了libjpeg-62和libjpeg62-dev,然后重新安装了PIL。发生了同样的错误

*** The _imaging C module is not installed

我在另一个网站上找到了一个潜在的解决方案,建议我从源代码强制重建PIL:

sudo python setup.py build_ext -f

这引发了一些有关此错误的有趣信息(如果您也遇到此问题)。似乎gcc没有正确编译各种文件(我有gcc4.3.3),即以下内容:

_imaging.c:3017: warning: initialization from incompatible pointer type
_imaging.c:3077: warning: initialization from incompatible pointer type
libImaging/Quant.c: In function 'rehash_collide':
libImaging/Quant.c:154: warning: cast to pointer from integer of different size

(其他一切似乎都很好)

我对此进行了一些研究,其他一些网站表示,这是因为我用来构建PIL的gcc版本与用于构建我正在使用的python.org Python的版本不同。这非常有意义。 Here's the other question I found that suggests this

最后,我尝试了最后一次安装,但这次是从存储库而不是我下载的tar。这似乎解决了这个问题。

sudo apt-get install python-imaging

虽然我还没有完全回答原来的问题,但我找到了另一种解决方案,并希望上述信息能够在这种情况下帮助其他人!

答案 1 :(得分:2)

我通过安装开发libjpeg修复了这个问题:

sudo apt-get install libjpeg8-dev

然后完全重新安装PIL模块。

(我正在使用虚拟环境,但它应该像运行Python一样运行)

答案 2 :(得分:0)

您尚未安装libjpeg库。这样做:

sudo apt-get install libjpeg

并重新运行PIL安装。