为什么这不会导致循环导入

时间:2013-05-06 14:07:51

标签: python import flask

我有一个烧瓶应用程序。

app.py

app = Flask(__name__)

from views import *

if __name__=="__main__":
    app.run()

views.py

from app import app

@app.route('/')
def home():
    return "Homepage"

因此,此处app.py正在导入views.py的所有内容,并且app中定义的视图需要app.py。但它仍然不会导致循环导入。为什么呢?

我使用以下方式运行此应用程序:

python app.py

2 个答案:

答案 0 :(得分:4)

这看起来类似于Flask允许您在创建应用时执行的Larger Applications文档。

来自文档:

  

循环进口

     

每个Python程序员都讨厌它们,但我们只添加了一些:循环导入(这是两个模块相互依赖的时候。在这种情况下views.py取决于__init__.py)。请注意,这一般是一个坏主意,但这里实际上很好。这样做的原因是我们实际上并没有使用__init__.py中的视图,只是确保导入模块,我们在文件的底部进行操作。

答案 1 :(得分:0)

如果我们尝试遵循程序的功能,那就是:

app = Flask(__name__) # OK
from views import * # Goes into views.py

from app import app # Looks into app.py, finds it, import it

# Defines home
@app.route('/')
def home():
    return "Homepage"

# import home and app, overriding app in app.py
# But views.app is the same as app.app, so it is still
# the same object

# Run main
if __name__=="__main__":
    app.run()

我打赌它会计算出类似的东西。由于app是在导入之前定义的,所以没关系。