在Google App Engine中Django表单无法找到模块PIL

2 投票
3 回答
861 浏览
提问于 2025-04-15 16:57

这里其实有几个问题。对于我正在做的事情,我是在用Django 1.1和Google App Engine做一个基本的图片上传。这里是我的表单类:

class UploadPictureForm(forms.Form):
    picture = forms.ImageField()

然后在提交的时候,我有以下代码:

def handle_picture(request):
    form = UploadPictureForm(request.POST, request.FILES)

    if form.is_valid():
        save_picture(request.FILES['picture']

我遇到了以下错误:

Exception Type: ImportError
Exception Value: No module named PIL
Exception Location:     /Library/Python/2.6/site-packages/django/forms/fields.py in clean, line 495
Python Executable: /usr/bin/python2.6
Python Version: 2.6.1
Python Path: [..., '/Library/Python/2.6/site-packages', '/Library/Python/2.6/site-packages/PIL']

我已经在site-packages目录下安装了PIL,如果我从命令行运行python,我可以用import PIL来导入PIL。

所以第一个问题是,为什么这不工作?是GAE做了什么让它无法工作吗?第二个问题是,我注意到GAE有一些图像API。我应该使用那些吗?这一切对我来说都是比较新的。

3 个回答

0

你能给我们看看完整的错误追踪信息吗?根据你提供的信息,有几种可能的情况:

  1. Django(一个流行的网页框架)可能因为某种原因直接想用PIL(一个处理图片的库)。但是在App Engine(一个云平台)上这样做是行不通的,因为那里没有PIL,而且你也不能上传它,因为PIL是用C语言写的。
  2. 你自己的代码可能直接在用PIL。你需要改用Images API(一个处理图片的接口)来解决这个问题。
  3. App Engine的框架可能在尝试使用PIL,但找不到它。Images API的本地模拟依赖于PIL,所以如果你的代码在用这个,App Engine就需要导入PIL。
0

而且,我不太确定你是否可以在GAE上使用PIL。因为PIL是一个基于C语言的库,所以在GAE上使用是不行的(GAE要求自定义包只能是纯Python的)。这方面甚至还有一个问题单。

PIL在本地的开发服务器上被用来模拟所有的图像API调用。你可以在这里找到安装说明

3

首先,你不应该在Python 2.6上使用Google App Engine(GAE)。因为Google App Engine是基于2.5版本开发的,通常在2.6上会出现很多问题。

而且,我不太确定你能否在GAE上使用PIL这个库。PIL是一个基于C语言的库,因此在GAE上是不允许的(GAE要求使用的包必须是纯Python的)。对此问题甚至有一个专门的讨论

所以,Google提供了图像API来解决这个问题。这个API仍然在后台使用PIL(至少在用户端是这样),但它提供了一个“安全”的子集供你使用。

撰写回答