在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單獨離開這個特定的導入,一種基於每個文件關閉導入組織的方式,或者類似的東西?
這個解決方法在PyDev中工作...我必須說我發現它比它必須使用的原因 - 即:圍繞循環導入:) –
它不僅限於這種解決方法,而且還更多類型的「導入攻擊」,如「sys.path」操作。 – Xion