AppEngine服务器无法导入原子模块

时间:2009-07-07 14:26:49

标签: python google-app-engine

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

  

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

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

1 个答案:

答案 0 :(得分:11)

将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命令。)

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