【轉】PyDev Eclipse使用技巧說明
PyDev Package Explorer
創建項目
在開展工作之前,需要創建一個新的項目。在 Eclipse 菜單欄中,選擇 File > New > Project > Pydev > Pydev Project,單擊 Next。
圖 5. 創建 Pydev 項目
這時,顯示出 Pydev Project 窗口,輸入項目名稱、選擇工作路徑、選擇 Python 解釋器的版本類型並選中復選框,然後單擊 Next,進入關聯項目的窗口,如果不需要關聯其他項目,則可以直接單擊 Finish,完成項目的創建。
創建 Python 包和模塊
接下來,在剛創建的項目中開始創建 Python 包和模塊。
- 進入 Pydev 透視圖,在 Python Package Explorer 中,右鍵單擊 src,選擇 New->Pydev Package,輸入 Package 名稱並單擊 Finish,Python 包就創建好了,此時,自動生成__init__.py 文件,該文件不包含任何內容。
註意:如果在創建項目的時候沒有選中“Create default src folder and add it to the pythonpath”復選框,則需要通過 File > New > Other > Source Folder 手動創建一個源代碼文件夾。
- 創建完 Pydev Package 後,右鍵單擊創建的包,選擇 New->Pydev Module,輸入模塊名稱,單擊 Finish。這樣,Python 模塊就建成了。
編輯源程序
對於源程序的一些基本編輯方法,就不做介紹了。下面介紹幾點 Pydev 提供的非常實用的編輯功能。
- 語法錯誤提示
Python 開發者在創建修改程序的過程中,如果能及時發現編輯過程中出現的語法錯誤,無疑對整個項目開發的質量和進展都是非常重要的。在 Python 透視圖中,Pydev Package Explorer 中列出了項目的源代碼,雙擊其中某一個 Python 文件,如果該文件包含語法錯誤,錯誤會以很醒目的方式展現出來。
圖 6. Pydev 文件語法錯誤提示
如果想把整個項目中所有包含語法錯誤的文件顯示出來,可以從 Python 透視圖自由切換到 Java 透視圖。在 Java Package 裏,一個個醒目的小紅叉標記了所有包含語法錯誤的 Python文件。
圖 7. Pydev 項目語法錯誤提示
- 源代碼編輯助手 (Content Assistents)
源代碼編輯助手 (Content Assistents,以下簡稱 CA),顧名思義,即用於幫助開發者編輯源程序,它提供了諸多方便實用的功能,引導開發者進行高效快速的項目開發。
通過快捷鍵 Ctrl+1 可以激活 CA,它支持的功能如下:
PyDev
- Move import to global scope
- Create docstring
- Assign result to new local variable (or field)
- Assign parameters to attributes
- Surround code with try..except or try..finally
PyDev Extensions
- Make import for undefined token
- Ignore error
- Don‘t analyze module
在安裝 PyDev 時,PyDev 和 PyDev Extensions 包都已安裝,所以 CA 的這幾大功能現在都支持。首先,先介紹如何使用 PyDev 包含的 CA 功能。
- PyDev 的 CA 功能
- Move import to global scope
以如下代碼為例,將光標移至 import sys 後,啟動快捷鍵 Ctrl+1 激活 CA,”Move import to global scope” 出現在標簽中,按 Enter 應用此功能。如果不想應用該功能,可以按 Esc 鍵取消。
#!/usr/bin/python –u sys.path.append(“./VirtualFS”) import sys
應用該功能後,import sys 被成功移至全局範圍內,消除了之前的錯誤。改變後的代碼如下。
#!/usr/bin/python –u import sys sys.path.append(“./VirtualFS”)
- Create docstring
Create docstring 功能可以自動為函數添加參數註解。將光標移至如下代碼行,啟動快捷鍵Ctrl+1 激活 CA,標簽欄中出現 ”Make docstring”。
def __init__(self, dbUser, dbPswd, dbHost):
按 Enter 應用該功能後,自動為該函數添加了參數註解。
def __init__(self, dbUser, dbPswd, dbHost):
‘‘‘
@param virtualOperator:
@param database:
@param hostname:
@param workDir:
‘‘‘
- Assign result to new local variable (or field)
CA 還提供一種功能能夠將函數返回結果賦給新的內部變量。以函數 callMethod 為例,將光標移至 a.callMethod() 行激活 CA。
def method (self, a): a.callMethod()
選擇 ”Assign to field(self, callMethod)” 或者 ”Assign to local(callMethod)”,可以將a.callMethod() 結果賦給新的內部變量 self.callMethod,改變後的代碼如下。
def method (self, a):
self.callMethod = a.callMethod()
- Assign parameters to attributes
在程序編輯過程中,如果需要把函數參數賦給變量,可以使用 CA 的 Assign parameters to attributes 功能自動完成這樣的需求。將光標移至函數 m1 所在行,激活 CA。
class Foo(object): Def m1(self, a, b):
在標簽欄中選擇 ”Assign parameters to attributes”,自動生成兩行代碼將參數 a,b 賦給同名變量。
class Foo(object): def m1(self, a, b): self.a = a self.b = b
- Surround code with try..except or try..finally
對可能產生異常的代碼,要進行異常捕獲,通常使用 try..except 或者 try..finally 語句來捕獲異常。選中一段代碼 print usage,激活 CA 的 ” Surround code with try..except or try..finally”功能,可以自動對 print usage 進行異常捕獲。
import sys def method (self, usage): try: print usage except: raise
下面,再介紹 PyDev Extensions 包含的 CA 功能是如何被運用的。
- PyDev Extension 的 CA 功能
- Make import for undefined token
以如下一段代碼為例,xmlreader 未定義,語法分析出錯。
class Test: def method(self): xmlreader
將鼠標移至出錯行,啟動快捷鍵 Ctrl+1 激活 CA,選擇標簽欄中的 ”Import xmlreader(xml.sax)”,自動生成一行代碼 from xml.sax import xmlreader,語法錯誤消除。
from xml.sax import xmlreader class Test: def method(self): xmlreader
- Ignore error
仍以上述代碼為例,由於 xmlreader 沒有被定義,包含語法錯誤,在這一行激活 CA,選擇 ”UndefinedVariable”,語法錯誤被忽略,xmlreader 後自動生成一行註釋標明 ”#@UndefinedVariable”。
class Test:
def method(self):
xmlreader #@UndefinedVariable
- Don‘t analyze module
語法分析器可以幫助顯示包含語法錯誤的代碼,但在程序編輯過程中,有時候需要刻意取消對程序的語法分析,CA 的 Don‘t analyze module 提供了這樣的功能。
將光標移至程序第一行,激活 CA,選擇 ”@PydevCodeAnalysisIgnore”,自動生成一行代碼 ”#@ PydevCodeAnalysisIgnore”,忽略對程序體的語法分析。
#@PydevCodeAnalysisIgnore class Test: def method(self): xmlreader
- Quick Outline
對特定的 Python 文件,Pydev Extensions 提供的 Quick Outline 能最簡單快捷地獲取該文件的組織結構,並能在該文件中方便地查詢定位所需信息。
在 Pydev 透視圖中,選擇 Source -> Show Quick Outline,或者使用快捷鍵 Ctrl+O 啟動該功能。
Python 文件的類、函數等組織架構便以樹狀形式被形象地展現出來。同時,Filter 提供了查詢定位的功能,可以方便地查詢所需信息並定位到相應的代碼段。
圖 8. Quick Outline
- Globals Browser
Globals Browser 是 Pydev Extensions 提供的另外一種強大的查詢定位功能。它可以查詢定位整個工程內的一些定義和屬性,包括:
- 類定義
- 方法定義
- 全局變量
- 類以及實例屬性
通過三種方式可以啟動該功能。
- 在 Pydev 透視圖中,從菜單欄中選擇 Pydev -> Globals Browser。
圖 9. 菜單欄啟動 Globals Browser
- 在Pydev 透視圖中,工具欄有如下的一個小圖標,鼠標移至該圖標上方,顯示 ”Pydev: Globals Browser” 標註。點擊該圖標按鈕,可以啟動 Globals Browser 功能。
圖 10. 工具欄啟動 Globals Browser
- 通過快捷鍵 Ctrl + Shift + T,可以快速啟動 Globals Browser 功能。
在 Filter 中輸入所要查詢的定義、變量或者屬性,Globals Browser 可以快速地定位到相應的代碼段。
圖 11. Globals Browser
- Hierarchy View
當某個 python 文件包含多個類時,如何才能簡單直觀地了解各個類之間的依存關系?Hierarchy View 提供了這樣的功能,它能將多個類之間的層次關系以樹狀結構直觀地顯示出來。
以一段 Python 代碼為例,定義了 Super1, Super2, ToAnalyze 和 Sub1 四個類。在 Pydev透視圖中,選擇 Windows -> Show View -> Other,在彈出的 Show View 窗口中,選擇 Pydev -> Hierarchy View。按快捷鍵 F4 激活 Hierarchy View,可以看到樹狀圖中顯示出了類間的層次關系。
圖 12. 在 Hierarchy View 中顯示類的層次關系
Hierarchy View 還支持以下四個功能:
- 在層次圖中,用鼠標單擊某個類,圖下方即顯示出該類的方法。
- 如果雙擊某個類、方法或者屬性,則會調出源程序,進入對該類、方法或者屬性的編輯狀態。
- 在 Hierarchy View 中,按住鼠標右鍵,並相左或向右移動鼠標,層次圖則會相應地縮小或放大。
- 在 Hierarchy View 中,按住鼠標左鍵移動鼠標,層次圖則會被隨意拖動到相應的位置。
回頁首
運行和調試
運行程序
要運行 Python 源程序,有兩種方法可供選擇。下面以一段代碼 example.py 為例介紹這兩種運行方式。
- 在 Pydev Package Explorer 中雙擊 example.py,選擇 Run -> Run As -> Python Run。程序example.py 立即被運行,在控制臺 Console 裏顯示出程序的執行結果。
圖 13. Python 程序及運行結果
- 在 Pydev Package Explorer 中,用鼠標右鍵單擊 example.py,在彈出的菜單欄中選擇 Run As -> Python Run。同樣,example.py 被執行,Console 中顯示程序的執行結果。
以上兩種方式是運行源程序的基本方法。Pydev 還提供一種特有的源程序運行功能 Run As Python Coverage,該功能不僅能顯示出程序的運行結果,而且能將程序運行過程中代碼的覆蓋率顯示出來。
要查看代碼的覆蓋率,首先需要打開 Code Coverage Results View。在 Pydev 透視圖中,選擇 Windows -> Show View -> Code Coverage Results View。在彈出視圖的左欄中,可以看到三個按鈕,”Choose dir!”, “Clear coverage information!” 和 ”Refresh Coverage infomation”。
圖 14. Code Coverage Results View
用鼠標左鍵單擊 ”Choose dir!”,在彈出的 Folder Selection 窗口中選擇需要運行的程序所在的包,單擊 Ok。這樣,這個包中所有的源程序便顯示在左欄中。
接下來,仍以 example.py 為例,看看 Run As Python Coverage 功能展現出的結果。選擇Run As -> Python Coverage,控制臺 Console 中顯示出了程序的運行結果。切換到剛才打開的 Code Coverage Results View 視圖,單擊左欄中的 example.py。
圖 15. 在 Code Coverage Results View 中顯示代碼覆蓋率
代碼運行過程中的覆蓋情況很清楚地顯示在右欄中。
雙擊左欄中的 example.py,沒有覆蓋到的代碼便在編輯器中以醒目的錯誤標誌被標註出來。
圖 16. 以錯誤標誌顯示沒有被覆蓋到的代碼
如果關閉 Code Coverage Results View 視圖,代碼的覆蓋信息並沒有丟失,重新打開該視圖同樣可以顯示出這些信息。只有通過單擊左欄的 “Clear coverage information!” 按鈕,才可以清除程序運行後得到的這些覆蓋信息。
調試程序
調試是程序開發過程中必不可少的,熟練掌握調試技能是開發者進行高效開發的前提和基礎。下面仍以 example.py 為例,介紹如何使用 Pydev 的調試功能。
調試需從添加斷點開始,有三種方式可以設置斷點。
- 雙擊編輯器中標尺欄左邊灰白的空白欄,在某行添加斷點。
圖 17. 雙擊標尺欄左邊灰白的空白欄添加斷點
- 鼠標右鍵單擊標尺欄,在彈出的菜單欄中選擇 ”Add Breakpoint” 添加斷點。
圖 18. 右鍵單擊標尺欄添加斷點
- 將鼠標移至需要添加斷點的代碼行,使用快捷鍵 Ctrl+F10,在彈出的菜單欄中選擇 ”Add Breakpoint” 添加斷點。
添加好斷點後,選擇 Debug As -> Python Run 啟動調試器,彈出一個對話框,詢問是否切換到調試器透視圖,單擊 Yes,即顯示調試模式。
圖 19. 調試器透視圖
程序調試過程中,常用的幾個快捷鍵如下:
- 單步跳入 Step Into: F5
- 單步跳過 Step Over: F6
- 單步返回 Step Return: F7
- 重新開始 Resume: F8
在控制臺 Console 中,顯示出斷點之前代碼的執行結果。如果要查看某個變量的值,以變量 a 為例,可以手動在控制臺中鍵入一行代碼 ”print ‘a is:’, a”,再連續按兩次 Enter 鍵,即顯示出變量的值。
圖 20. 控制臺顯示變量值
在調試模式下,要查看表達式的值,選中後單擊鼠標右鍵,選擇 Watch。彈出 Expression面板,顯示出了相應的變量或表達式的值。
圖 21. Expression 面板中顯示表達式值
如果想要在滿足一定條件下已經添加的斷點才有效,可以設置斷點的屬性。在編輯器的標尺欄中單擊鼠標右鍵,彈出的菜單欄中選擇 Breakpoint Properties。在顯示的窗口中,選中復選框 ”Enable Condition”,輸入需要滿足的條件,單擊 Ok。
圖 22. 設置斷點屬性
這樣,當重新執行程序調試的時候,只有滿足條件的情況下,該斷點才有效。
回頁首
總結
Pydev 結合 Ecplise 實現了如此功能強大且易用的 Python IDE,本文不能一應俱全地介紹出來,對於一些基本的功能沒有做過於詳盡的介紹,主要突出 Pydev 特有的一些功能。Pydev for Eclipse 的出現為 Python 開發人員實現高效的項目開發提供了很好的條件,該項目也在不斷的發展之中,其功能將會越來越強大。
參考資料
- Python 專題包括了可愛的 Python 系列、Python 探索系列、Python 擴展、使用 Python 進行各種應用開發等等。
- 查看 “Eclipse 推薦讀物列表”。
- 在 developerWorks 上瀏覽所有 Eclipse 內容。
- 您是 Eclipse 新手嗎?閱讀 developerWorks 文章 “Eclipse 平臺入門” 以了解它的起源和架構,以及如何用插件擴展 Eclipse。
- 查看 IBM developerWorks 的 Eclipse 項目資源,提高您的 Eclipse 技巧。
- 訪問 developerWorks 開放源碼專區,獲得豐富的 how-to 信息、工具和項目更新,幫助您用開放源碼技術進行開發,並與 IBM 產品結合使用。
【轉】PyDev Eclipse使用技巧說明