2010-05-03 49 views
3

我正在开发GAE应用程序。访问模块在GAE dev服务器中被拒绝

已经用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

BTW,当我运行python的命令行,并尝试“进口feedparser”,它的工作原理没有瑕疵 – 2010-05-03 07:54:16

+0

听起来像一个权限错误,什么用户是dev_appserver.py当它运行? – Zack 2010-05-03 08:01:22

回答

6

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

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

(更新时间:2011年10月)也记住的硬限制:文件(应用程序文件和静态文件)的

  • 最大总数:3000(调升为10k 1.5.5,2011年10月)
  • 应用程序或静态文件的最大大小:10MB(在1.5中最高可达32MB。5)
  • 最大所有的应用程序和静态文件的总大小: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℃模块以及在不允许的/黑名单2.7的C模块:

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

1

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

编辑

documentation

您可以包括其他纯Python库 您的应用程序通过 将代码在应用程序 目录。如果您在 应用程序目录中的模块目录中创建了一个符号链接 ,appcfg.py将 跟随该链接,并在您的应用程序中包含模块 。

Python的模块包括路径 包括应用程序的根目录 (含有 的app.yaml文件的目录)。您在应用程序的根目录 中创建的 的模块可使用 根目录中的路径。不要忘记在子目录中创建 init .py文件,因此Python会将 子目录识别为包。