0

我是 Google App Engine 的新手,并且一直在玩它,但是对于我的一生,我不明白如何导入非标准模块,因此也不完全了解 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 文件中,记住没有物理结构,它们只是虚拟文件夹吗?

如果你能提供帮助,我会干杯,我敢肯定我是个笨蛋:)

4

3 回答 3

3

appconfig(跳过文件)文档:

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

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

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

无需在app.yaml. SimPy 确保您的应用程序目录包含一个以文件命名的子目录__init__.py,当然还有Simulation.py.

于 2010-08-06T12:07:07.300 回答
1

app.yaml 文件的文档位于应用程序配置页面中。

handlers 部分的工作原理是通过将请求的 url 与依次指定的每个模式进行比较,并在找到第一个匹配项时运行匹配的处理程序(或者如果指定static_dirstatic_files而不是script.

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

url 不必与 webapp 内部的结构有任何关系。url 路径和包含您的处理程序和模块的目录之间不需要任何对应关系(尽管为了理智起见,您可能希望至少保持一些相关性)。

您是否浏览过入门文档?

驻留的目录app.yaml(即您的应用程序的根目录,因为它将被上传)将位于 python 路径上,您应该能够引用与它相关的所有模块(和/或如果需要在您的处理程序中添加其他模块)。

于 2010-08-06T12:21:43.980 回答
1

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

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

从子文件夹导入模块

于 2018-06-26T13:12:20.607 回答