使用PIL和Google Appengine SDK时出现问题

时间:2010-02-18 10:52:04

标签: python google-app-engine windows-server-2008 python-imaging-library

我有一台Windows Server 2008 R2(64位)计算机,我想开发一个谷歌AppEngine应用程序。

所以我从python.org安装了Python 2.5.4(因为Google SDK说我需要2.5和2.5.6没有任何MSI) 然后我从http://www.pythonware.com/products/pil/安装了PIL我使用版本1.1.7 for python 2.5 我使用了这两种版本的32位版本。

然后我安装了AppEngine SDK。

Hello-World工作得很好,但是我想操作一个图像,但由于我得到了这个堆栈跟踪和HTTP 500响应,因此无效:

2010-02-18 11:50:27 Running command: "['C:\\Python25\\pythonw.exe', 'C:\\Program Files 

(x86)\\Google\\google_appengine\\dev_appserver.py', '--admin_console_server=', '--port=8080', 'd:\\imgsvc']"
WARNING  2010-02-18 10:50:29,260 datastore_file_stub.py:623] Could not read datastore data from c:\users\admini~1\appdata\local\temp\dev_appserver.datastore
INFO     2010-02-18 10:50:29,627 dev_appserver_main.py:399] Running application imgsvc on port 8080: http://localhost:8080
ERROR    2010-02-18 10:50:40,058 dev_appserver.py:3217] Exception encountered handling request
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3180, in _HandleRequest
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3123, in _Dispatch
    base_env_dict=env_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 515, in Dispatch
    base_env_dict=base_env_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2382, in Dispatch
    self._module_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2292, in ExecuteCGI
    reset_modules = exec_script(handler_path, cgi_path, hook)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2188, in ExecuteOrImportScript
    exec module_code in script_module.__dict__
  File "d:\imgsvc\imgsvc.py", line 7, in <module>
    outputimage = images.resize(inputimage.content, 32, 32)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\images\__init__.py", line 625, in resize
    return image.execute_transforms(output_encoding=output_encoding)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\images\__init__.py", line 513, in execute_transforms
    response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 78, in MakeSyncCall
    return apiproxy.MakeSyncCall(service, call, request, response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 278, in MakeSyncCall
    rpc.CheckSuccess()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_rpc.py", line 149, in _WaitImpl
    self.request, self.response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 80, in MakeSyncCall
    method(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\images\images_stub.py", line 171, in _Dynamic_Transform
    response_value = self._EncodeImage(new_image, request.output())
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\images\images_stub.py", line 193, in _EncodeImage
    image.save(image_string, image_encoding)
  File "C:\Python25\lib\site-packages\PIL\Image.py", line 1439, in save
    save_handler(self, fp, filename)
  File "C:\Python25\lib\site-packages\PIL\PngImagePlugin.py", line 564, in _save
    import ICCProfile
SystemError: Parent module 'PIL' not loaded
INFO     2010-02-18 10:50:40,081 dev_appserver.py:3246] "GET / HTTP/1.1" 500 -

我试图运行的python脚本:

from google.appengine.api import urlfetch
from google.appengine.api import images

url = "http://www.brokenwire.net/bw/images/113.png"
inputimage = urlfetch.fetch(url)
if inputimage.status_code == 200:
    outputimage = images.resize(inputimage.content, 32, 32)
    self.response.headers['Content-Type'] = "image/png"
        self.response.out.write(outputimage)

有人知道这里出了什么问题吗?

我也试过这个独立的python脚本,工作正常:

import Image
im = Image.open('filename.png')
im2 = im.resize((100,100), Image.ANTIALIAS)
im2.show()

似乎我使用的图像有所不同:

url = "http://www.r-stone.net/blogs/ishikawa/uploaded_images/google_appengine-779483.png"

给出问题的堆栈跟踪,但是

url = "http://www.brokenwire.net/bw/images/113.png"

没有问题。

3 个答案:

答案 0 :(得分:2)

当Python找不到ICCProfile模块时会发生这种情况。 当使用槽GAE而不是ImportError时,导入器会抛出SystemError,并且函数失败。 我做的是更改... \ Python25 \ Lib \ site-packages \ PIL \ PngImagePlugin.py中的第567行 来自

except ImportError:

为:

except Exception:

答案 1 :(得分:2)

我的Windows机器上有完全相同的问题(在MacOS上运行)所以我卸载了PIL 1.1.7并安装了之前的1.1.6版本,现在它就像魅力一样;)。

以下是此黑客的来源: http://www.chris-wong.net/parent-module-pil-not-loaded/

答案 2 :(得分:0)

我猜App Engine不支持PIL。目前有629人标记this issue要求提供Python图像库(PIL)(这是App Engine中排名第五的问题),我也只是鼓励你标记这个问题。