Python静态代码检查工具Flake8

简介python

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年品牌优点与经验打造的企业级产品矩阵,致力于提供一站式企业信息化解决方案。网易企业服务的推出是网易在企业邮箱的基础上对企业市场的进一步重要布局。湖南领先网络科技是网易企业产品一级经销商,专业为企业提供一站式信息化解决方案。

本文仅表明做者观点,不表明百度立场。系做者受权百家号发表,未经许可不得转载。