2

我正在做一个烧瓶教程(http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world),我遇到了我无法解释的行为。本教程的主要目录结构是:

microblog
|
|---- app 
|     |---- __init__.py
|     |---- views.py  
|
|---- flask  
|---- run.py

文件的内容是:

微博/run.py

#!flask/bin/python

from app import app
app.run(debug=True)

微博/app/ init .py

from flask import Flask
app = Flask(__name__)
from app import views 

微博/app/views.py

from app import app

@app.route("/")
@app.route("/index")

def index():
    return "Hello World!"

一切正常,但如果我转置这两行:

app = Flask(__name__)
from app import views

在 views.py 中,然后我执行 run.py 我得到:

ImportError:无法导入名称应用程序

为什么会这样?

4

2 回答 2

1

因为您正在尝试从新创建的变量导入app。如果要导入变量模块,请使用importlib包:

my_module = importlib.import_module(app, 'view')
于 2013-05-10T09:29:03.377 回答
1

与其他答案所说的相反,这是一个循环导入问题。app.__init__尝试导入app.views,它尝试导入在 中app.app Flask创建的app.__init__。如果Flask是在app.__init__导入之前创建的app.views,则app.views查找app.app. 如果是在导入后创建的,则在尝试查找Flask时它还不存在。app.views

循环进口会导致各种可怕的问题。这可能很困难,但处理它们的最佳方法通常是重新组织您的代码,以免循环导入。

于 2015-05-30T00:38:31.790 回答