2012-01-19 55 views
2

在eclipse + PyDev下使用Flask框架进行编程时,我注意到IDE中的自动组织导入功能(用Ctrl + O调用)有时会阻碍。防止PyDev移动特定的导入

这与Flask处理需要将视图代码拆分为多个模块或包的方式有关。基本上,如果你有一个views.py模块包含您的请求处理:

from myapp import app 

@app.route('/') 
def root(): 
    return "Hello world" 

和您的瓶应用在__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单独离开这个特定的导入,一种基于每个文件关闭导入组织的方式,或者类似的东西?

回答

1

我不使用PyDev,但你有没有尝试抛出它的导入解析器?这是肮脏的,但你可以尝试这样的:

if 1: import views 

由于行不以“进口”开始,也许会的PyDev传过来?

+0

这个解决方法在PyDev中工作...我必须说我发现它比它必须使用的原因 - 即:围绕循环导入:) –

+0

它不仅限于这种解决方法,而且还更多类型的“导入攻击”,如“sys.path”操作。 – Xion