在GAE开发服务器中访问模块被拒绝

3 投票
2 回答
1212 浏览
提问于 2025-04-15 22:17

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

1

在GAE(谷歌应用引擎)中,你不能使用那些不属于GAE本身的库,比如django 0.96.1,或者没有包含在GAE里的库。你需要把这些库安装在你的网络应用的同一个路径下。

编辑

根据文档

你可以通过把其他纯Python库的代码放在你的应用目录中来包含这些库。如果你在应用目录中对某个模块的目录创建一个符号链接,appcfg.py会跟随这个链接,把模块包含到你的应用里。

Python模块的包含路径会包括你应用的根目录(也就是包含app.yaml文件的目录)。你在应用根目录中创建的模块可以通过从根目录开始的路径来使用。别忘了在子目录中创建init.py文件,这样Python才能把这些子目录识别为包。

6

App Engine 在一个受限制的环境中运行 Python 代码,只有经过授权的标准库模块和包可以从你的应用中导入。

正如 @mg 提到的,如果你想使用第三方模块和包,你需要把它们打包到你的应用里。具体来说,如果你想使用 feedparser,只需将 feedparser.py 文件放到你的 App Engine 顶层目录中(也就是你的 app.yamlindex.yamlmain.py 文件所在的地方)。

(更新于2011年10月)还要记住一些硬性限制:

  • 文件总数的最大限制(应用文件和静态文件):3000个(在2011年10月的1.5.5版本中提升到10000个)
  • 应用或静态文件的最大大小: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

撰写回答