【问题标题】:AppEngine server cannot import atom moduleAppEngine 服务器无法导入 atom 模块
【发布时间】:2009-07-07 14:26:49
【问题描述】:

我在我的 ArchLinux 上安装了 gdata 库,以及一个在开始时导入 atom 库的简单应用程序,当我运行 gapp 引擎并访问该 Web 应用程序时,

$ python2.5 ./dev_appserver.py ~/myapp

它抛出异常“没有名为 atom 的模块”。但是当我在 Python2.5 交互模式下运行“import atom”时,它运行良好。如何在我的 GAppEngine 应用程序中导入 atom 模块?

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    将 atom.py 添加到您保存 GAE Python 源代码的同一目录中,并确保在您上传应用程序时将其上传到服务器。 (上传会在您执行 appcfg.py update myapp/ 时发生,除非您特意阻止它;使用命令上的 --verbose 标志来查看正在上传或更新的确切内容。

    (或者,如果它是一个大文件,则使用它制作一个 zipfile,然后在您的处理程序中将该 zipfile 附加到 sys.path;例如,参见 zipimport)。

    这假设您有一个文件atom.py,这就是您要导入的文件;如果该文件依次导入其他文件,则您必须以类似方式使其他文件也可用,依此类推(请参阅 Python 标准库中的 modulefinder 以了解查找所需所有模块的方法)。

    如果atom 不是一个模块而是一个包,那么你在import 上得到的是包所在目录中的__init__.py 文件;所以同样的建议也适用(并且 zipimport 变得更具吸引力,因为您可以轻松打包任何目录结构,例如使用 Linux 命令行中的 zip -r 命令)。

    如果在任何时候(如 modulefinder 将帮助您发现)存在对第三方 C 编码扩展(Python 可以使用但不是用纯 Python 编写的 .so.pyd 文件)的依赖不在 GAE 提供的简短列表中(请参阅here),那么 Python 代码在 GAE 上不可用,因为 GAE 仅支持纯 Python。如果是这种情况,那么您必须寻找 GAE 支持 的替代方法,即纯 Python 方法来获得您需要的相同功能。

    【讨论】:

    • 这引发了一个有趣的困境。如果我在谷歌的网站上阅读同样的内容,我相信这个答案是正确的。如果我做了后者,并且有人用“官方”答案的解释来回答,我会投赞成票。但是基于“我相信 Martelli 先生知道他在说什么”来投票似乎有点奇怪。无论如何+1,让球滚动;-)
    • “官方答案”不在一个地方(zipimport 记录在我所指的两个地方,第三方库合二为一,modulefinder 不在 GAE 文档中,而是在 Python 文档中 [我再次给一个 URL],appcfg.py 在另一个,...) 所以我正在做的是在一个地方综合所有需要的信息,从其他零散的位置,这似乎比“释义”更有用;-) .无论如何,所有这些信息都很容易试验和验证!-) 但无论如何感谢您的信任;-)。
    • 抱歉,是的,我并不是要暗示存在一个比这更好的“官方”答案。只是我们可以有理由相信,如果有一个,这大致就是它会说的。所以我有点惊讶,答案在 20 分钟内没有得到支持 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2015-03-27
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多