PIL错误:_imaging C模块未安装

17 投票
6 回答
36387 浏览
提问于 2025-04-16 00:10

我已经安装了PIL(Python图像库)。

当我运行Python的时候:

import PIL
import Image
import _imaging

没有出现错误。不过,当我运行我的应用程序时,它却抛出了一个错误:

The _imaging C module not installed

6 个回答

2

如果你能成功使用 from PIL import Imageimport _imaging 失败,下面的内容可能会对你有帮助。如果 Image 也失败了,请查看最后的 注意事项

在 Ubuntu 13.04(raring)上,我遇到了这个问题。结果发现,Ubuntu 将 _imaging.so 安装在了一个 App Engine 不期望的地方:/usr/lib/python2.7/dist-packages,而不是 /usr/lib/python2.7/dist-packages/PIL。所以 _imaging.sosys.path 中找不到。

这里有几种解决办法:

把 PIL 的 C 模块放到已经在路径上的地方:

我注意到 /path/to/google_appengine/lib/PIL-1.1.7sys.path 中,但我的安装里没有这个目录。所以我创建了这个目录,并把 .so 文件复制到里面,结果一切正常。每次更新 App Engine SDK 时,你都需要重复这个操作,但至少不会影响你正在开发的代码。

main.py 中修改 sys.path:

这段代码会检查我们是否在运行开发应用服务器,如果是的话,就会把正确的目录添加到路径中。虽然没有测试过,但应该可以用;)

# Find _imaging.so and put its directory here.
# `locate _imaging.so` or `dpkg -L python-imaging`
PIL_PATH = '/usr/lib/pyshared/python2.7/'

PRODUCTION_MODE = not os.environ.get(
    'SERVER_SOFTWARE', 'Development').startswith('Development')

if not PRODUCTION_MODE:
    sys.path.insert(PIL_PATH)

我想这样做可能会让你使用到的不仅仅是 PIL 模块,这样会在开发和生产环境之间引入更多的差异。此外,这种方法涉及到修改你应用的源代码,如果有不止一个人在开发,这样做似乎不太好。


注意事项:如果 import Image 失败,你可能忘了把 PIL 库添加到你的 app.yaml 文件里。

libraries:
- name: PIL
  version: "latest"

在添加这个库后,你可能需要重启你的 dev_appserver.py,这样更改才能在例如交互式控制台中生效。

3

在Windows系统上,去掉C:\Python27文件夹里的_imaging.pyd和_imagingft.pyd这两个文件。
把C:\Python27\Lib\site-packages\PIL文件夹里的所有_imaging模块都留着。

这样做对我有效。

3

我在你发的链接上回复了这个内容(谢谢你),但我想在这里也发一下。抱歉重复发帖了。

我希望能找到一种方法,不用重新编译东西。我正好在用虚拟环境(virtualenv)。我发现如果我把虚拟环境删除掉,然后用pip重新安装,图像处理功能又开始正常工作了。这些步骤似乎有效(注意,我是在用OSX)。

不确定这是否重要,但我检查了一下jpeg是否安装了。

winesap:~ $ port installed | grep -i jpeg
  jpeg @7_0
  jpeg @8a_0 (active)

确保我安装了PIP。

sudo port -v install py26-pip

删除我之前的虚拟环境,然后重新创建一个。

rm -rf ve
virtualenv –no-site-packages –distribute ve
. ./ve/bin/activate

在虚拟环境中安装pil和django。

echo “pil” > requirements.pip
echo “django” >> requirements.pip
pip-2.6 install -E ./ve/ -r requirements.pip

测试一下现在导入是否正常。注意没有烦人的C模块错误了。

python
>>import import ImageFont 
>>

希望这些信息对你有用。

撰写回答