在谷歌应用引擎(python27)中从父目录导入失败

时间:2014-12-01 10:48:40

标签: python google-app-engine python-2.7 python-import

我一直在研究一些GAE项目。这是目录结构

Project Home
|-- config.py
|-- util.py
|-- app.yaml
|-- main.py
|-- __init__.py
|-- login
|   |-- __init__.py
|   |-- login.py
|   `-- login.yaml

我的目标是在 login.py 文件中导入 util.py ,在尝试使用多个选项后,我无法成功完成此操作。我在堆栈溢出时遇到了一些关于此问题的类似帖子,但这些都没有帮助我完成这项工作。

P.S:我正在使用python运行时环境2.7

修改

login.py 中使用import util会出现以下错误

Traceback (most recent call last):
  File "<whatever>/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "<whatever>/google_appengine/google/appengine/runtime/wsgi.py", line 298, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "<whatever>/google_appengine/google/appengine/runtime/wsgi.py", line 84, in LoadObject
    obj = __import__(path[0])
  File "<whatever>/<Project Home>/login/login.py", line 31, in <module>
    import util
  ImportError: No module named util

2 个答案:

答案 0 :(得分:1)

我发现您有两个yaml配置文件app.yaml和login.yaml,因此您必须使用Google App Engine Modules API。

使用Modules API时,登录模块作为单独的自包含实例在单独的Python虚拟环境中运行。它无法“看到”父目录的内容。

有三种解决方案:

(a)将'util.py'文件放在登录目录中复制。

(b)将login.py和login.yaml放在根目录中。

(c)不要使用Modules API,只需要一个带有单个配置文件的默认模块app.yaml。给app.yaml两个URL处理程序,一个用于main.py,另一个用于login.py。我个人推荐这个选项,因为它是最简单的。

https://cloud.google.com/appengine/docs/python/modules/

答案 1 :(得分:0)

在Python中,您永远不会在代码中使用.py扩展名。语法只是:

import util