静态代码检查 python-python 静态代码块
Flake8是Python官方发布的一款帮助检测Python代码是否规范的工具。 与目前比较流行的Pylint相比,Flake8检查规则灵活,支持附加插件的集成,扩展性强。 Flake8 是对以下三个工具的封装:
1)PyFlakes:静态检查Python代码逻辑错误的工具。
2) Pep8:静态检查PEP8编码风格的工具。
3) NedBatchelder's McCabe:静态分析Python代码复杂度的工具。
Flake8除了封装了以上三个工具,还提供了扩展的开发接口。
官方文档:
安装
下面介绍两种安装方法:
1. 在 Ubuntu 16.04 上安装 Flake8。
易于获取更新
apt-get 安装 python-flake8
2、Windows安装好Python后,打开cmd,输入命令:
python -m pip 安装 flake8
其中,代表的是Python的版本号,可以通过python –v或者python –version查看。
当然你也可以直接按照默认配置安装Flake8:
python -m pip 安装 flake8
可以通过flake8 –help 查看是否安装成功。
建议根据Python版本号进行镜像安装。 Windows下,在默认安装形式下做静态代码检查,会检测到一些和Python3冲突的,如下:
指示
文件结构如下:
1、查看指定文件:Flake8 + Python项目名,红框处为Flake8默认配置检测到的问题。
从红框可以看出Flake8检测到了4个错误,分类为H101、H233、F821。 H开头的是安装黑客插件后检测到的错误。 Flake8基本错误返回码分为三种:
E***/W***:PEP8 中的错误和警告。
F***:PyFlakes检测到的错误,其实PyFlakes本身并没有提供错误返回码,flake8对pyflakes返回的错误信息进行了分类。
C9**:McCabe 检测到的代码复杂性。 Flake8提供了一个扩展选项:--max-complexity静态代码检查 python,如果函数的McCabe复杂度高于给定值静态代码检查 python,会发出警告。 此功能对于查找过于复杂的代码非常有用。 根据 Thomas J. McCabe, Sr(Cyclomaticcomplexity 的创始人)的研究,代码复杂度不应超过 10,而 Flake8 官网推荐值为 12。
2.显示具体错误
如果想在静态代码检查中显示工程下的H233具体错误怎么办? 可以通过 flake8 --select 命令来实现:
flake8 -- 选择 H233 shadowtest
如果需要选择以特定类型开头的错误码,eg:以E开头
flake8 --选择E shadowtest
如果您需要选择多个特定的错误代码,只需用逗号分隔即可,例如:错误代码 1,错误代码 2。
3.忽略特定的错误代码
静态代码检查忽略H233类型错误,设置多个忽略方法同上
flake8 --忽略 H233 shadowtest
4.忽略特定文件/文件夹
静态代码检查忽略test2.py文件,如上设置多个忽略方法
flake8 --exclude shadowtest/path2/test2.py 阴影测试
静态代码检查忽略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的相关概念可以参考这篇文章:
7.配置其他
更多Flake8命令参考:flake8 –help
Flake8 的小插件
Flake8相对于其他Python静态代码检查工具的优势在于其良好的可扩展性。 以下是一些比较流行的 Flake8 插件:
1.黑客攻击
由于 Python 是 OpenStack 的官方语言,因此根据 OpenStack Style Guidelines 生成 hacking,基于原始的 Google Python Style Guide 和 OpenStack 自己的规则。 黑客官方文档:
插件安装也很简单,通过pip安装hacking,在Windows cmd窗口执行:
python –m pip 安装
安装hacking黑客插件后,会新增一种H开头的错误返回码: H***:hacking返回的错误类型。
hacking中有些错误类型检测默认是关闭的,可以通过命令行或者配置文件修改开关:enable-extensions=H106,H203
2. pep8-命名
鉴于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格式,构建完成后可以运行Publish Junit testresult report输出文档:
1.安装flake8-junit-report
2. pip 安装 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. 在詹金斯上显示:
以上由网易企业服务-企业信息服务商:湖南领先网络科技有限公司整理发布。
网易企业服务是网易凭借20年的品牌优势和经验打造的企业级产品矩阵,致力于提供一站式企业信息化解决方案。 网易企业服务的推出,是网易在企业邮箱基础上在企业市场的进一步重要布局。 湖南领先网络科技是网易企业产品一级经销商,专业为企业提供一站式信息化解决方案。返回搜狐查看更多