为什么我不能在顶部移动进口?

时间:2017-10-19 19:34:51

标签: python flask

我正在学习烧瓶。我找到了跟随代码的例子

__init__.py

from flask import Flask

app = Flask(__name__)
from app import views

view.py

from app import app

@app.route('/')
def index():
    return "hello world"

run.py(在顶层):

from app import app
app.run()

我无法理解为什么我无法将from app import views移到顶端。如果我这样做,我会收到错误:

> run.py
Traceback (most recent call last):
  File "F:\app1\run.py", line 1, in <module>
    from app import app
  File "F:\app1\app\__init__.py", line 2, in <module>
    from app import views
  File "F:\app1\app\views.py", line 1, in <module>
    from app import app
ImportError: cannot import name 'app'

2 个答案:

答案 0 :(得分:0)

run.py文件行

from app import app

表示&#34;来自包应用(包含__init__.py文件的文件夹,在您的情况下为F:\ app1 \ app,导入对象应用&#34;以及在__init__.py文件行

app = Flask(__name__)

创建application object。由您的应用程序名称引起的主要混淆 - app - 与应用程序对象名称一致 如果你移动

from app import views

上面

app = Flask(__name__)
from app import app中的

view.py会引发ImportError,因为app包中的对象app尚未定义。

答案 1 :(得分:0)

Python是解释语言。当涉及到一行时,它会尝试执行它。这就是为什么在定义app之前无法导入views的原因。

__init__.py的工作版

app = Flask(__name__)
from app import views # it will "execute: views.py"
# views.py - indenting for better understanding
    from app import app # App is defined here and it can be imported

__init__.py

的版本无效
from app import vies # it will execute vies.py"
# vies.py - indenting for better understanding
    from app import app # Exception - app doesn't exist here
app = Flask(__name__)

你需要非常小心python导入。