在eclipse + PyDev下编程并使用Flask框架时,我注意到IDE中的自动组织导入功能(使用 Ctrl + O 调用)有时会妨碍。
这与Flask处理将视图代码拆分为多个模块或包的需要有关。基本上,如果您有一个包含请求处理程序的views.py
模块:
from myapp import app
@app.route('/')
def root():
return "Hello world"
您的Flask应用已在__init__.py
中定义:
from flask import Flask
app = Flask('MyApp')
app.config.from_pyfile('config.py')
@app.before_request
def before_request(): pass # omitted for brevity
@app.teardown_request
def teardown_request(): pass # omitted for brevity
您需要在后一个文件的末尾 import views
,才能将视图函数添加到Flask的路由表中。由于views.py
导入__init__.py
以访问app
变量,因此会导致循环导入。但它工作得很好,实际上是一种既定的做法,如suggested by documentation。
不幸的是,PyDev对此技术一无所知。我们是否应该意外地触发组织__init__.py
的导入(这并不罕见,考虑到这个选项通常有用),PyDev很乐意将关键的import views
移到顶端。当然,这会导致不正确(无法解决)循环导入,以及恼人的运行时错误。
有没有办法防止这种情况发生 - 比如#@Directive
会告诉PyDev单独保留这个特定的导入,一种关闭每个文件的导入组织的方法,或类似的东西?
答案 0 :(得分:1)
我不使用PyDev,但你试过抛弃它的导入解析器吗?这很脏,但你可以尝试类似的东西:
if 1: import views
由于该行不以“import”开头,因此PyDev可能会将其传递过来吗?