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

标签 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 的新手 - 我错过了什么?

最佳答案

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

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

关于python - 从 GAE 开发服务器中拒绝访问模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2756790/

相关文章:

django - 我们如何允许用户在 Django 中为表单创建自己的字段?

django - 除了 Django 文档之外,还有什么好的 Django 教程?

java - Objectify - 由祖先过滤的仅键查询的效率如何?

python - 如何在 Python 2.6 中升级 sqlite3 包?

python - 导入错误没有名为kafka的模块

python - 从单个 monorepo 引用多个 Django 项目

java - 在低级数据存储 API 中处理一对多关系的最佳方法是什么?

python - Google AppEngine、Django 和 request.FILES

python - cv2.face.mindistancepredictcollector() 出错

python - 包装 Python int/float 对象