Flake8 是由Python官方發佈的一款輔助檢測Python代碼是否規範的工具,相對於目前熱度比較高的Pylint來講,Flake8檢查規則靈活,支持集成額外插件,擴展性強。Flake8是對下面三個工具的封裝:git
1)PyFlakes:靜態檢查Python代碼邏輯錯誤的工具。github
2)Pep8: 靜態檢查PEP8編碼風格的工具。網絡
3)NedBatchelder’s McCabe script:靜態分析Python代碼複雜度的工具。ide
不光對以上三個工具的封裝,Flake8還提供了擴展的開發接口。svg
官方文檔:https://pypi.python.org/pypi/flake8/函數
安裝工具
這裏介紹兩種安裝方法:佈局
1.在Ubuntu 16.04安裝Flake8。測試
apt-get update
apt-get install python-flake8
2.在Windows安裝Python以後,打開cmd,經過命令:
python<version> -m pip install flake8
其中,<verison>表明着Python的版本號,可經過python –v或者python –version進行查看。
固然也能夠直接按默認配置安裝Flake8:
python -m pip install flake8
可經過flake8 –help查看是否安裝成功。
建議仍是按照Python版本號來鏡像安裝,Windows下以默認安裝形式作靜態代碼檢查,會檢測到與Python3一些衝突的地方,以下:
使用方法
文件結構以下:
1.檢查指定文件:Flake8 + Python項目名,標紅框表示經過Flake8默認配置檢測出來的問題。
從紅色方框中能夠看到 Flake8檢測到了四個errors,歸類爲H10一、H23三、F821,H開頭的是安裝hacking插件後檢測出來的錯誤,Flake8基礎錯誤返回碼一共有三類:
E***/W***: PEP8中的error和warning。F***: 經過PyFlakes檢測出的error,其實PyFlakes自己是不提供錯誤返回碼的,flake8對pyflakes返回的錯誤消息進行了分類。C9**: 經過McCabe檢測出的代碼複雜度。Flake8提供一個擴展選項:--max-complexity,若是函數的McCabe複雜度比給定的值更高將發出一個告警。該功能對於發現代碼過分複雜很是有用,根據Thomas J. McCabe, Sr(Cyclomaticcomplexity的創造者)研究,代碼複雜度不宜超過10,而Flake8官網建議值爲12。
2.展現特定錯誤
假如靜態代碼檢查中想展現項目下的H233特定錯誤怎麼辦呢?能夠經過flake8 --select命令來實現:
flake8 --select H233 shadowtest
若是須要選擇以特定類型開頭的錯誤碼,eg:以E開頭
flake8 --select E shadowtest
若是須要選擇多個特定錯誤碼用逗號隔開就能夠了,eg:錯誤碼1,錯誤碼2。
3.忽略特定錯誤碼
靜態代碼檢查忽略H233類型錯誤,設定多個忽略方法同上
flake8 --ignore H233 shadowtest
4.忽略特定文件/文件夾
靜態代碼檢查忽略test2.py文件,設定多個忽略方法同上
flake8 --exclude shadowtest/path2/test2.py shadowtest
靜態代碼檢查忽略path2整個文件,設定多個忽略方法同上
flake8 --exclude shadowtest/path2/shadowtest
5.輸出修改格式
flake8 --format=%(path)s::%(row)d,%(col)d::%(code)s::%(text)s shadowtest
假如想把代碼複雜度設爲其餘值,只看幾種類型的錯誤,而且有幾個文件夾下的內容不須要檢查是否是每次檢查都要把上面的設置從新輸入一遍?解決以下:配置文件。
Flake8它是支持將我的設定保存在配置文件裏面的,咱們能夠經過以setup.cfg, tox.ini, 或者.flake8以上三種文件形式保存配置。
以tox.ini爲例:
輸出結果先後對比:
未加入配置前:
加入tox.ini配置後:
假如ignore裏面包含H101,可是select也包含H101怎麼辦?
通過試驗:select的優先級比ignore高,二者都含有相同的錯誤類型下,ignore的這一錯誤類型的檢查會被忽略掉。
假如存在多個配置文件,怎麼處理?
能夠經過flake8 --config=配置文件項目名稱,這種方式解決。
6.經過setup.py檢查工程中全部的python文件
關於setup.py相關概念參考這篇文章:http://lingxiankong.github.io/blog/2013/12/23/python-setup/
7.配置其餘
關於Flake8更多命令參考:flake8 –help
Flake8的小插件
Flake8相比其餘Python靜態代碼檢查工具的優點在於其良好的擴展性,如下是介紹Flake8幾款比較流行的插件:
1.hacking
因爲Python是OpenStack的官方語言,hacking則是根據OpenStack Style Guidelines所產生,基於原有的Google Python Style Guide和OpenStack自有規則而造成的。hacking官方文檔:https://pypi.python.org/pypi/hacking
插件安裝也很是簡單,經過pip安裝hacking,Windows cmd窗口執行:
python –m pip install
hackinghacking插件安裝完成以後,會新增一類錯誤返回碼以H開頭:H***:hacking返回的錯誤類型。
在hacking中有些錯誤類型檢測是默認關閉的,能夠經過命令行或者配置文件修改開關:enable-extensions= H106,H203
2.pep8-naming
針對目前pep8還沒有支持命名規範的檢查,有人開發出了此款插件做爲規則補充。
pep8-naming插件安裝完成以後,會新增一類錯誤返回碼以N開頭:
N***: pep8-naming返回的錯誤類型。
其餘插件能夠經過命令:pip search flake8來搜索,確定有你須要的,安裝也很是簡單:pip install 插件名稱
有些坑先提示一下:
規則檢查插件與插件之間,可能會存在重複提示,假如要排除一類則你的配置文件會愈來愈複雜,並非安裝越多越好,工具不在於過多,而在於會用。插件與插件之間,尤爲是兩個新的插件可能沒法完美兼容。eg:爲了可視化,本人在flake8上面安裝了flake8-chart 0.1.5這一插件,
經過這一插件將flake8的分析結果轉化爲圖形(只支持餅圖和柱狀圖)。
執行如下命令:
flake8 --statistics shadowtest |flake8chart--chart-type=BAR --chart-output=shadow.svg
在Jenkins上分析flake8的報告
在Flake8上安裝插件,flake8-junit-report將flake8的報告轉換爲junit format,能夠經過構建後操做 Publish Junit testresult report能不能輸出文檔:
1.安裝flake8-junit-report
2. pip install flake8-junit-report
3.輸出Flake8測試報告
4.flake8 --output-file flake8.txt shadowtest
5.轉換成junit測試結果的xml
6.python -m junit_conversor flake8.txt flake8_junit.xml
7.轉換成junit.xml報告:
8.在Jenkins上面展現:
以上由網易企業服務-企業信息化服務提供商:湖南領先網絡科技有限公司 整理髮布。
網易企業服務是網易憑藉其20年品牌優點與經驗打造的企業級產品矩陣,致力於提供一站式企業信息化解決方案。網易企業服務的推出是網易在企業郵箱的基礎上對企業市場的進一步重要佈局。湖南領先網絡科技是網易企業產品一級經銷商,專業爲企業提供一站式信息化解決方案。