我正在为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的新手 - 我缺少什么?
答案 0 :(得分:6)
App Engine在沙箱中运行Python代码,并且只有授权的标准库模块和包可以从您的应用程序导入。
正如@mg所提到的,如果你想允许第三方模块和包,您需要将它们与您的应用程序捆绑在一起。要专门为feedparser执行此操作,只需将feedparser.py
文件放入顶级App Engine目录(app.yaml
,index.yaml
和main.py
所在的目录)。< / p>
(2011年10月更新)也牢记硬限制:
如果您想节省文件总数,可以将一大堆.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模块:
答案 1 :(得分:1)
因为在GAE中,您无法访问不属于GAE本身的库,不包含在GAE中,如django 0.96.1,或者不属于您的应用程序。将该库以及其他所有库安装在Web应用程序的相同路径中。
修改强>
您可以包含其他纯Python 您的应用程序库 将代码放入您的应用程序中 目录。如果你做了一个符号链接 到您的模块目录 应用程序目录,appcfg.py会 点击链接并包含该模块 在你的应用程序中。
Python模块包含路径 包括您的应用程序的根目录 目录(包含的目录) app.yaml文件)。您创建的模块 在应用程序的根目录中 可以使用来自的路径 根。别忘了创造 子目录中的 init .py文件,因此Python会识别出来 子目录作为包。