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

时间:2009-12-12 22:18:08

标签: python google-app-engine python-imaging-library

这里实际上有几个问题。对于我正在做的事情,我正在使用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

问题#1是为什么这不起作用? GAE正在采取措施阻止这项工作吗?第二件事是我注意到GAE有一些Image API。我应该使用那些吗?所有这些对我来说都是新的。

3 个答案:

答案 0 :(得分:3)

对于初学者,你不应该在Python 2.6中使用GAE。 Google App Engine的创建时考虑到2.5,它通常会在2.6上以多种方式中断。

更多,我不太确定你可以在GAE上使用PIL。它是一个基于C的库,因此它是GAE的禁忌(它要求自定义包只是纯Python)(对于这个问题,甚至有a ticket)。

这就是为images API创建的内容。它仍然使用PIL作为后端(至少在用户端),但提供了它的“安全”子集。

答案 1 :(得分:0)

你能告诉我们完整的堆栈跟踪吗?根据您提供的内容,有以下几种选择:

  1. 由于某种原因,Django正试图直接使用PIL。这不适用于App Engine,因为PIL在那里不可用,并且你无法上传,因为它是C代码。
  2. 您自己的代码正在尝试直接使用PIL。您需要使用Images API。
  3. App Engine框架正在尝试使用PIL,但找不到它。 Images API的本地存根依赖于PIL,因此如果您的代码尝试使用它,则App Engine需要导入PIL。

答案 2 :(得分:0)

  

更多,我不太确定你可以在GAE上使用PIL。它是一个基于C的库,因此它对GAE来说是禁忌(它要求自定义包只是纯Python)(甚至还有这个问题的门票)。

开发服务器在本地使用PIL来模拟所有图像api调用。您可以找到installation instructions here