08/19/2008 09:47:00 GMT tommy wrote:

目前版本GAE SDK的Python限制

目前版本GAE的Python运行环境使用的是Python 2.5.2.

工作于Python运行环境的代码必须都是由纯粹的Python写成,不能包括任何c扩展或者其它任何需要编译的语言代码。

这个Python运行环境包括一个受限版的Python标准库。因为不被App Engine支持,所以有些模块被禁用掉了,例如网络和文件系统读写API。另外,os模块是可用的,当然,除了某些不受支持的特性之外。如果你企图调用不受支持的模块或者特性的话,将会触发一个异常(我说:当然,这不是我们希望见到的事情,所以。。。嗯。。。别违规)

有些标准库的模块被替换掉了,或者重新修改以适应App Engine的运作,例如:

  • cPickle被重命名为pickle。调用cPickle命名空间引用的功能将不再可用。
  • marshal现在是个空引用。可以正常导入,但是不会起任何作用。
  • 同样,这些模块也成了空引用,impftplibselectsocket (就像上面说得,这些都是网络模块,说白了,Google不想让你自己写socket级别的网络应用,而是调用Google提供的类似于GData之类的API)
  • tempfile被禁用掉了,除了TemporaryFile之外,对这个模块其它功能的调用将会触发StringIO异常。
  • logging模块是可用的,而且我们非常鼓励开发者使用这个模块!

除了Python的标准库和App Engine SDK的库之外,我们也提供了一些第三方的库,比如:

你也能在程序中包括一些其它的由纯Python写作的库,把这些库放在你的程序开发路径下面。如果你创建了一个指向某一个第三方模块的符号链接,那么在通过appcfg.py上传程序的时候,appcfg将会自动的将这个模块包含在你的程序中,一并上传到服务器。(当然,这是基于Linux和OS X开发者来说的,Win32没有符号链接这么一说。)

Python的模块搜索路径包括你的应用程序的根(即包括app.yaml的那个路径),你自己创建的放在根路径下面的模块,通过对根路径的相对引用是可以被访问到的,但是别忘了在模块路径下面建立一个__init__.py文件,这样,Python才知道这个路径下的所有文件是在一个里面。

add comment

No Comments