我正在学习烧瓶。我找到了跟随代码的例子
__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'
答案 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导入。