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

时间:2010-05-03 07:53:30

标签: python django google-app-engine permissions

我正在为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

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

我是Python / Django / GAE的新手 - 我缺少什么?

2 个答案:

答案 0 :(得分:6)

App Engine在沙箱中运行Python代码,并且只有授权的标准库模块和包可以从您的应用程序导入。

正如@mg所提到的,如果你想允许第三方模块和包,您需要将它们与您的应用程序捆绑在一起。要专门为feedparser执行此操作,只需将feedparser.py文件放入顶级App Engine目录(app.yamlindex.yamlmain.py所在的目录)。< / p>

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

  • 最大文件总数(应用程序文件和静态文件):3,000(2011年10月1。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模块/软件包,其中C代码为2.5。 Python 2.7运行时释放了许多限制,以至于白名单已成为黑名单。以下是允许/列入白名单的2.5 C模块以及不允许/列入黑名单的2.7 C模块:

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

答案 1 :(得分:1)

因为在GAE中,您无法访问不属于GAE本身的库,不包含在GAE中,如django 0.96.1,或者不属于您的应用程序。将该库以及其他所有库安装在Web应用程序的相同路径中。

修改

来自documentation

  

您可以包含其他纯Python   您的应用程序库   将代码放入您的应用程序中   目录。如果你做了一个符号链接   到您的模块目录   应用程序目录,appcfg.py会   点击链接并包含该模块   在你的应用程序中。

     

Python模块包含路径   包括您的应用程序的根目录   目录(包含的目录)   app.yaml文件)。您创建的模块   在应用程序的根目录中   可以使用来自的路径   根。别忘了创造   子目录中的 init .py文件,因此Python会识别出来   子目录作为包。