从GAE dev服务器访问模块被拒绝

Tom*_*ohl 3 python django permissions google-app-engine

我正在为GAE开发一个应用程序.

使用setuptools安装了"feedparser"模块后,我尝试导入它(使用"import feedparser")语句.但是,模块没有加载,当我在屏幕上查看dev_appserver.py调试日志时,我看到以下内容:

Access to module file denied: /usr/local/lib/python2.6/dist-packages/feedparser-4.1-py2.6.egg/feedparser.py
Run Code Online (Sandbox Code Playgroud)

所以GAE dev服务器无法访问该模块,但我无法弄清楚原因.路径正确,可以访问该文件.

我是Python/Django/GAE的新手 - 我错过了什么?

wes*_*cpy 6

App Engine在沙箱中运行Python代码,只能从您的应用程序导入授权的标准库模块和包.

正如@mg所提到的,如果你想允许第三方模块和软件包,你需要将它们与你的应用程序捆绑在一起.要做到这一点专门为feedparser,只是下降feedparser.py的文件到您的顶级应用程序引擎目录(其中你app.yaml,index.yamlmain.py所在的位置).

(2011年10月更新)也牢记硬限制:

  • 最大文件总数(应用程序文件和静态文件):3,000(在2011年10月的1.5.5中增加到10k)
  • 应用程序或静态文件的最大大小:10MB(1.5.5中增加到32MB)
  • 所有应用程序和静态文件的最大总大小:150MB

如果你想节省文件总数,你可以把一大堆.py文件放在一个ZIP中,这样你只需支付一个文件.虽然这篇文章略显过时 - 建议捆绑现在包含的Django 1.0 - 将模块和包捆绑到ZIP文件中的技术仍然适用:

http://code.google.com/appengine/articles/django10_zipimport.html

讨论文件限制的文档中的官方页面:

http://code.google.com/appengine/docs/python/runtime.html#Pure_Python

(2011年11月更新):下面的链接包含一个列有白名单的Python模块/包,其中包含2.5的C代码.Python 2.7运行时释放了许多限制,以至于白名单已成为黑名单.以下是允许/列入白名单的2.5 C模块以及不允许/列入黑名单的2.7 C模块:

http://code.google.com/appengine/kb/libraries.html