python – 从GAE开发服务器中访问拒绝的模块

我正在为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 dev服务器无法访问该模块,但我无法弄清楚原因.路径正确,可以访问该文件.

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

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

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

(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模块/包,其中包含2.5的C代码. Python 2.7运行时释放了许多限制,以至于白名单已成为黑名单.以下是允许/列入白名单的2.5 C模块以及不允许/列入黑名单的2.7 C模块:

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

点赞