在Google App Engine中导入我自己的模块

时间:2010-08-06 11:12:33

标签: python google-app-engine import simpy

我是谷歌应用引擎的新手,刚刚玩过它,但对于我的生活,我不明白如何导入非标准模块,并且就此而言,并不完全了解app.yaml文件的目的。

基本上我想从我的脚本文件中导入SimPy(大约15个python文件的集合),但是我所做的每一件事都会导致一个ImportError,即:

from SimPy.Simulation import *
ImportError: No module named SimPy.Simulation

目前他们都在同一个文件夹中,我的app.yaml文件显示为:

application: physicalsim
version: 1
runtime: python
api_version: 1

handlers:
- url: /
  script: physicalsim.py
- url: /
  script: Globals.py
- url: /
  script: Simulation.py
etc....

现在我很确定我的yaml文件的语法错误,但是无法找到任何有用的文档,如何在任何地方做到这一点(有点令人沮丧),我真的不明白其中的含义在我看到的一些app.yaml文件中定义的文件夹记住没有物理结构,它们只是虚拟文件夹吗?

如果你能提供帮助,请保持干杯,我确信我是偶然遇到的:)

3 个答案:

答案 0 :(得分:3)

来自appconfig(跳过文件)doc:

  

应用程序目录中的路径与static_dir路径或static_files上载路径匹配的文件被视为静态文件。 应用程序目录中的所有其他文件都被视为应用程序和数据文件

     

skip_files元素指定不将应用程序目录中的哪些文件上载到App Engine。该值可以是正则表达式,也可以是正则表达式列表。在上传应用程序时,要从上传的文件列表中省略任何与正则表达式匹配的文件名。

(不要将SimPy放在跳过列表中。)

无需在app.yaml中指定包含的程序文件。 确保您的应用程序目录包含名为SimPy的子目录 使用__init__.py文件,当然还有Simulation.py

答案 1 :(得分:1)

app.yaml文件is here in the Application Config page的文档。

处理程序部分基本上是通过将请求的URL与依次指定的每个模式进行比较,以及何时找到运行匹配处理程序的第一个匹配(或者如果static_dirstatic_files提供静态文件指定而不是script

在您显示的app.yaml中,与/完全匹配的网址将导致调用处理程序physicalsim.py。所有其他处理程序将被忽略,因为它们是从同一个URL提供的。如果这些是physicalsim.py的支持模块,则无需在app.yaml中包含任何有关它们的内容。

网址不一定与webapp的内部结构有什么关系。 url路径与包含处理程序和目录的目录之间不需要任何对应关系。模块(虽然为了理智,你可能想要保持至少一些相关性)。

您是否浏览过getting started文档?

app.yaml所在的目录(即将要上传的应用程序的根目录)将位于python路径上,您应该可以参考所有模块(&/或者如果需要,在你的处理程序中添加其他内容。)

答案 2 :(得分:1)

将空的 init .py添加到要从中导入模块的任何子文件夹中。。我不知道这一点...

我在这篇SO帖子中找到了答案。

Import module from subfolder