【问题标题】:importing from parent directory fails in google app engine (python27)在谷歌应用引擎(python27)中从父目录导入失败
【发布时间】:2014-12-01 10:48:39
【问题描述】:

我一直在从事一些 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

【问题讨论】:

  • import util.py 应该可以工作。有什么错误吗?
  • @TimCastelijns 我添加了错误
  • 我的猜测是,项目根目录不在路径中存在一些问题。可以从from .. import util成功导入吗?

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


【解决方案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/

【讨论】:

    【解决方案2】:

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

    import util
    

    【讨论】:

    • util 是否会导入日志记录?
    • 不,util.py 使用了from google.appengine.api import modulesfrom config import app_globalsimport re 这三个模块,这里config.pyutil.py 在同一个目录中。
    • 好的,配置导入登录吗?我只是想排除循环依赖。
    • 不,配置有 2 个导入:from google.appengine.api import memcacheimport yaml
    猜你喜欢
    • 2023-04-11
    • 2014-03-02
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多