【问题标题】:Proper way to relative import in Python 2.7Python 2.7 中相对导入的正确方法
【发布时间】:2017-05-09 21:41:31
【问题描述】:

我有一个 Flask,我正在从 Python3 迁移到 Python2.7

我的项目结构如下:

app/
    model/
        __init__.py
        exercise.py
    utils/
        __init__.py
        loader.py

exercise.py 类包含Exercise 类。我需要在loader.py 文件中使用它。

app 文件夹本身位于 Heroku 项目的顶层,该项目有一个 run.py 文件,该文件从 loader.py 调用 Loader 类。

以前我有:

from app.model.exercise import Exercise

但这在 Python2.7 中不起作用。

附加到sys.path 似乎也不起作用。

这样做的正确方法是什么?

【问题讨论】:

  • 根包在哪里?你的主模块是在app 还是其他地方?您是否有没有在此处显示的__init__.py 文件,或者这实际上是包结构?很可能from app.model.exercisefrom model.exercise 是正确答案,但无论哪种方式,您都需要至少在model/ 目录中的__init__.py
  • @DanielPryden 我现在会更新结构。
  • 您没有在此处显示的任何命名冲突?
  • 如果它适用于 Python 3.x 但不适用于 2.x,from __future__ import absolute_import 是否解决了它?这将表明路径上的相对和绝对导入冲突。
  • @DmitryPolonskiy 如果我理解正确的话,不。

标签: python python-2.7 python-3.x flask


【解决方案1】:

文件夹不是 Python 包,除非它包含 __init__.py。所以你不能导入from app,除非app文件夹包含__init__.py文件。

【讨论】:

  • 这就是问题所在。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2019-08-03
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 2015-09-13
  • 2013-02-27
相关资源
最近更新 更多