【问题标题】:How to do relative imports on app engine? (python)如何在应用引擎上进行相对导入? (Python)
【发布时间】:2014-05-27 20:30:55
【问题描述】:

我正在尝试使用 python 在 App Engine 中进行相对导入。这是我的基本情况:

app/
     models.py
     app.yaml
     /mymodule/
         test.py
         mymodule.yaml

我正在尝试导入 models.py.. 基本上我有跨不同模块使用的相同数据存储模型,所以我希望能够从 test.py(或任何其他模块)。

相对导入如何与 App Engine 配合使用?谢谢。

编辑:我的 app.yaml 文件:

application: [my app name]
version: main
runtime: python27
api_version: 1
threadsafe: true

inbound_services:
- mail

builtins:
- appstats: on

handlers:

    [my handlers]

libraries:
- name: webapp2
  version: "2.5.1"

- name: jinja2
  version: latest

- name: markupsafe
  version: latest

- name: ssl
  version: latest

【问题讨论】:

  • 你如何展示你的模块有点令人困惑。你能说得更清楚一点,并告诉我们你的app.yaml在那个结构中的位置吗?
  • 只是试图让它更清楚——这有帮助吗?基本上app/ 是我的应用程序的目录,其中包含models.pyapp.yaml,以及目录/mymodule/。在子目录/mymodule/ 中是test.py,我试图从中导入models.py
  • 您应该包含处理程序以查看您如何使用您的文件..

标签: python google-app-engine


【解决方案1】:

我相信解决方案是将mymodule.yaml 放在 app.看来PYTHONPATH 中代码的根目录是模块的yaml 文件所在的目录。

【讨论】:

  • 投了赞成票。我和 OP 有同样的问题,将模块 yaml 文件放在顶层目录(而不是模块目录内)可以解决这个导入问题。我只是怀疑为什么official documentation 向我们展示了这种目录层次结构。可能所有模块都是独立的,不使用模块外的任何通用代码?
【解决方案2】:

app下创建一个名为__init__.py的空文件,将你的目录转换成一个包,然后你就可以像这样导入:

from app import models

您可能还想将相同的文件添加到您的mymodule 目录中。

【讨论】:

  • 好的,完美,谢谢!如果我想从模型中导入特定类,这是正确的语法吗? from app import models.classThatIWant
  • 应该是from app.models import classThatIWant,但我认为最好先导入模型,然后在models.classThatIWant 之类的代码中使用它,但这是首选...
  • 我刚刚用 App Engine 测试了它,但它不起作用——它说:ValueError: Attempted relative import in non-package。我在每个目录中都有__init__.py 文件,我正在尝试从...进行相对导入。
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
相关资源
最近更新 更多