Python Google应用程序引擎中的Django表单找不到模块PIL

Python Google应用程序引擎中的Django表单找不到模块PIL,python,google-app-engine,python-imaging-library,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)

这里实际上有几个问题。对于我正在做的事情,我正在使用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']
我已经在
站点包
目录中安装了PIL,如果我从命令行运行python,我可以使用
导入PIL


所以问题1是为什么这不起作用?盖伊是不是做了什么事情让它无法工作?第二件事是我注意到GAE有一些图像API。我应该用这些来代替吗?所有这些对我来说都有些新鲜。

对于初学者来说,您不应该在Python 2.6中使用GAE。谷歌应用引擎(GoogleAppEngine)是在考虑到2.5的情况下创建的,它通常在2.6上以多种方式中断

更重要的是,我不太确定你能不能用PIL和GAE。它是一个基于C的库,因此它对GAE来说是一个禁忌(它要求定制的包只能是纯Python的)(甚至对于这个问题也没有)


这就是我们创造的目的。它仍然使用PIL作为后端(至少在用户端),但提供了一个“安全”的子集。

您能给我们展示完整的stacktrace吗?根据您提供的内容,有几个选项:

  • 出于某种原因,Django正试图直接使用PIL。这在AppEngine上不起作用,因为PIL在那里不可用,并且您不能上传它,因为它是C代码
  • 您自己的代码正试图直接使用PIL。您需要改用imagesapi
  • 应用程序引擎框架正在尝试使用PIL,但找不到它。ImagesAPI的本地存根依赖于PIL,因此如果您的代码试图使用PIL,则应用程序引擎需要导入PIL
  • 更重要的是,我不太确定你能不能用PIL和GAE。它是一个基于C的库,因此它对GAE来说是一个禁忌(它要求定制的包只能是纯Python的)(这个问题甚至还有一张罚单)


    开发服务器在本地使用PIL来模拟所有映像api调用。您可以发现

    这一切都是有道理的。我一直想切换到2.5,但还没有机会。至于使用PIL,这是有道理的。我可以很容易地使用imagesapi。令人惊讶的是,我得到了一个模块未找到的错误。这里的想法是GAE只是忽略它知道是基于C的模块吗?只是好奇而已,答案并不特别重要。哇,有趣的故事!甚至可以在Python的REPL中导入PIL吗?我已经通过easy_install安装了PIL,但我不能!然后我从源代码和宾果中重新编译了整个内容!现在可以了。(在这两种情况下,
    导入图像
    工作都完美无缺)。