2012-01-19 85 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