我已经使用Django一段时间了,但决定让Flask尝试我最新的侧面项目。因为我不想将我的整个应用程序放在一个文件中,所以我按照文档here将我的Flask应用程序放入一个包中。至关重要的是,这些说明引入了一种循环导入:
每个Python程序员都讨厌它们,但我们只添加了一些:循环导入(当两个模块相互依赖时。在这种情况下, views.py 依赖于 __ init __。py < / em>的)。请注意,这一般是一个坏主意,但这里实际上很好。这样做的原因是我们实际上并没有使用 __ init __。py 中的视图,只是确保导入模块,我们在文件的底部进行操作。
事实上,这还没有在我的应用程序中造成任何问题,如果我删除此行,我的应用程序将无法运行。但是,我的副项目已经足够大,我决定尝试使用Flask-Testing编写单元测试。在他们的所有文档中,他们只是from package import app
正常,就像我的应用程序中的每个子模块一样。但是,如果我在主程序包目录中删除tests.py
并尝试此导入,然后尝试运行测试,它会失败,并带有上面提到的循环导入:
File "/home/me/my_app/my_app/__init__.py", line 165, in <module>
import views
File "/home/me/my_app/my_app/views.py", line 23, in <module>
from my_app import app, db
ImportError: cannot import name app
在Flask-Testing的文档以及Mega-Tutorial section on Unit Testing等其他地方,此导入已完成,似乎“正常工作”。但是,对我来说,这是我唯一一次遇到此循环导入问题。我错过了什么?
答案 0 :(得分:0)
根据记录here,您的my_app/__init__.py
应如下所示:
from flask import Flask
app = Flask(__name__)
from my_app import views
请注意,在导入app
之前,views
已定义为。如果您遵循该规则,则不会出现任何循环导入问题。