Pylint 提供了簡單的方式來分析 Python 代碼,其高可配置性很容易使一個部門的人員使用統一的代碼風格。 本文將通過理論介紹和示例分析闡述如何 Pylint 來規范 Python 代碼。
一、Pylint 是什么
Pylint 是一個 Python 代碼分析工具,它分析 Python 代碼中的錯誤,查找不符合代碼風格標准和有潛在問題的代碼。
Pylint 是一個 Python 工具,除了平常代碼分析工具的作用之外,它提供了更多的功能:如檢查一行代碼的長度,變量名是否符合命名標准,一個聲明過的接口是否被真正實現等等。
Pylint 的一個很大的好處是它的高可配置性,高可定制性,並且可以很容易寫小插件來添加功能。
如果運行兩次 Pylint,它會同時顯示出當前和上次的運行結果,從而可以看出代碼質量是否得到了改進。 目前在 eclipse 的 pydev 插件中也集成了 Pylint。
二、Pylint 在 Linux 上的安裝
1. 在 Linux 上,首先安裝 Python 的包(高於版本 2.2),並在環境變量 $PATH 中添加 Python 可執行文件的路徑。
2. 下載 Pylint、logilab-astng (version >= 0.14) 和 logilab-common (version >= 0.13) 的包 , 使用 tar zxvf *.tar.gz解壓縮這些包。
3. 依次進入 logilab-astng、logilab-common 和 Pylint 解開的文件夾中,運行命令 Python setup.py install來安裝。
4. 安裝完成后,就可以通過 pylint [options] module_or_package來調用 Pylint 了。
三、 Pylint 在 Windows 上的安裝
1. 安裝 Python 的包(高於版本 2.2),右鍵單擊桌面上的我的電腦圖標,選擇屬性,高級,環境變量,在 $PATH 中添加 Python 的安裝路徑,如 C:\Python26\。
2. 使用解壓縮工具解壓縮所有的包。
3. 打開命令行窗口,使用 cd依次進入 logilab-astng、logilab-common 和 Pylint 解開的文件夾中,運行命令 python setup.py install來安裝。
4. 安裝完成后,在 Python 的安裝路徑下出現一個 Scripts 文件夾,里面包含一些 bat 腳本,如 pylint.bat 等。
5. 為了使調用 pylint.bat 的時候不需要輸入完整路徑,在 Python 的安裝目錄下創建 pylint.bat 的重定向文件,這是一個純文本文件 pylint.bat,里面包含 pylint.bat 的實際路徑,如:C:\Python26\Scripts\pylint.bat。
6. 安裝完成后,可以通過 pylint [options] module_or_package來調用 Pylint 了。
四、 pylint使用
使用 Pylint 對一個模塊 module.py 進行代碼檢查:
1. 進入這個模塊所在的文件夾,運行
pylint [options] module.py
這種調用方式是一直可以工作的,因為當前的工作目錄會被自動加入 Python 的路徑中。
2. 不進入模塊所在的文件夾,運行
pylint [options] directory/module.py
這種調用方式當如下條件滿足的時候是可以工作的:directory 是個 Python 包 ( 比如包含一個 __init__.py 文件 ),或者 directory 被加入了 Python 的搜索路徑中。
使用 Pylint 對一個包 pakage 進行代碼檢查:
1. 進入這個包所在文件夾,運行
pylint [options] pakage
這種調用方式是一直可以工作的,因為當前的工作目錄會被自動加入 Python 的路徑中。
2. 不進入包所在的文件夾,運行
pylint [options] directory/ pakage
這種情況下當如下條件滿足的時候是可以工作的:directory 被加入了 Python 的路徑中。比如在 Linux 上,export PYTHONPATH=$PYTHONPATH: directory。
此外,對於安裝了 tkinter 包的機器,可以使用命令 pylint-gui打開一個簡單的 GUI 界面,在這里輸入模塊或者包的名字 ( 規則同命令行 ), 點擊 Run,Pylint 的輸出會在 GUI 中顯示。
五、 Pylint常用命令行參數
-h,--help : 顯示所有幫助信息。 --generate-rcfile :可以使用 pylint --generate-rcfile 來生成一個配置文件示例。可以使用重定向把這個配置文件保存下來用做以后使用。也可以在前面加上其它選項,使這些選項的值被包含在這個產生的配置文件里。 如:pylint -- persistent=n --generate-rcfile > pylint.conf, 查看 pylint.conf,可以看到 persistent=no,而不再是其默認值 yes。 --rcfile=<file> :指定一個配置文件。把使用的配置放在配置文件中,這樣不僅規范了自己代碼,也可以方便地和別人共享這些規范。 -i <y_or_n>, --include-ids=<y_or_n> :在輸出中包含 message 的 id, 然后通過 pylint --help-msg=<msg-id>來 查看這個錯誤的詳細信息,這樣可以具體地定位錯誤。 -r <y_or_n>, --reports=<y_or_n> :默認是 y, 表示 Pylint 的輸出中除了包含源代碼分析部分,也包含報告部分。 --files-output=<y_or_n> :將每個 module /package 的 message 輸出到一個以 pylint_module/package. [txt|html] 命名的文件中,如果有 report 的話,輸出到名為 pylint_global.[txt|html] 的文件中。默認是輸出到屏 幕上不輸出到文件里。 -f <format>, --output-format=<format> :設置輸出格式。可以選擇的格式有 text, parseable, colorized, msvs (visual studio) 和 html, 默認的輸出格式是 text。 --disable-msg= <msg ids> :禁止指定 id 的 message. 比如說輸出中包含了 W0402 這個 warning 的 message, 如果不希望它在輸出中出現,可以使用 --disable-msg= W0402
六、Pylint的輸出
Pylint的默認輸出格式是原始文本(raw text)格式 ,可以通過 -f <format>,--output-format=<format> 來指定別的輸出格式如html等等。
在Pylint的輸出中有如下兩個部分:源代碼分析部分和報告部分。
源代碼分析部分:
對於每一個 Python 模塊,Pylint 的結果中首先顯示一些"*"字符 , 后面緊跟模塊的名字,然后是一系列的 message, message 的格式如下: __MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE__ MESSAGE_TYPE 有如下幾種:
(C) 慣例。違反了編碼風格標准
(R) 重構。寫得非常糟糕的代碼。
(W) 警告。某些 Python 特定的問題。
(E) 錯誤。很可能是代碼中的錯誤。
(F) 致命錯誤。阻止 Pylint 進一步運行的錯誤。
報告部分:
在源代碼分析結束后面,會有一系列的報告,每個報告關注於項目的某些方面,如每種類別的 message 的數目,模塊的依賴關系等等。
具體來說,報告中會包含如下的方面: 檢查的 module 的個數。 對於每個 module, 錯誤和警告在其中所占的百分比。
比如有兩個 module A 和 B, 如果一共檢查出來 4 個錯誤,1 個錯誤是在 A 中,3 個錯誤是在 B 中,那么 A 的錯誤的百分比是 25%, B 的錯誤的百分比是 75%。 錯誤,警告的總數量。