我正在为 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.yaml
、index.yaml
和 main.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 模块:
关于python - 从 GAE 开发服务器中拒绝访问模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2756790/