Python静态代码检查工具Flake8

Python静态代码检查工具Flake8flake8

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、flake8简介

Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强。Flake8是对下面三个工具的封装:

1)PyFlakes:静态检查Python代码逻辑错误的工具。

2)Pep8: 静态检查PEP8编码风格的工具,是 Python 代码风格规范,它规定了类似行长度、缩进、多行表达式、变量命名约定等内容

3)NedBatchelder’s McCabe script:静态分析Python代码复杂度的工具。

不光对以上三个工具的封装,Flake8还提供了扩展的开发接口。

官方文档:https://pypi.python.org/pypi/flake8/

二、flake8 安装

这里介绍两种安装方法:

2.1、在Ubuntu 16.04安装Flake8。

apt-get update
apt-get install python-flake8

2.2、在Windows安装Python之后,打开cmd,通过命令:

python<version> -m pip install flake8
其中,<verison>代表着Python的版本号,可通过python –v或者python –version进行查看。
当然也可以直接按默认配置安装Flake8:
python -m pip install flake8
可通过flake8 –help查看是否安装成功。

三、flake8 使用

3.1、 检查指定文件

Flake8 + Python项目名,标红框表示通过Flake8默认配置检测出来的问题。

从红色方框中可以看到 Flake8检测到了四个errors,归类为H101、H233、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。

3.2、展示特定错误

假如静态代码检查中想展示项目下的H233特定错误怎么办呢?可以通过flake8 --select命令来实现:
flake8 --select H233 shadowtest
如果需要选择以特定类型开头的错误码,eg:以E开头
flake8 --select E shadowtest
如果需要选择多个特定错误码用逗号隔开就可以了,eg:错误码1,错误码2。

3.3、忽略特定错误码

静态代码检查忽略H233类型错误,设定多个忽略方法同上
flake8 --ignore H233 shadowtest

3.4、忽略特定文件/文件夹

静态代码检查忽略test2.py文件,设定多个忽略方法同上
flake8 --exclude shadowtest/path2/test2.py shadowtest
静态代码检查忽略path2整个文件,设定多个忽略方法同上
flake8 --exclude shadowtest/path2/shadowtest

3.5、输出修改格式

flake8 --format=%(path)s::%(row)d,%(col)d::%(code)s::%(text)s shadowtest
假如想把代码复杂度设为其他值,只看几种类型的错误,并且有几个文件夹下的内容不需要检查是不是每次检查都要把上面的设置重新输入一遍?解决如下:配置文件。
Flake8它是支持将个人设定保存在配置文件里面的,我们可以通过以setup.cfg, tox.ini, 或者.flake8以上三种文件形式保存配置。
经过试验:select的优先级比ignore高,两者都含有相同的错误类型下,ignore的这一错误类型的检查会被忽略掉。
假如存在多个配置文件,怎么处理?
可以通过flake8 --config=配置文件项目名称,这种方式解决。

3.6、通过setup.py检查工程中所有的python文件

关于setup.py相关概念参考这篇文章:http://lingxiankong.github.io/blog/2013/12/23/python-setup/

3.7、配置项列表

count 打印错误总数
diff 仅检查修改的文件并报告 diff 中包含的错误
exclude 排除,使用逗号分隔
filename 检查的文件
format 选择用于向用户显示错误的格式化程序,默认情况下,有两种可用的格式化程序:default 和 pylint
hang-closing 切换 pycodestyle 是否应该强制匹配左括号行的缩进
ignore 要忽略的错误代码列表,默认为E121,E123,E126,E226,E24,E704,W503,W504
extend-ignore 添加到要忽略的错误代码列表,无需完全覆盖默认列表
max-line-length 最大长度
select 希望 Flake8 报告的错误代码列表
extend-select 添加到要报告错误的代码列表,无需完全覆盖默认列表
disable-noqa 报告所有错误,即使它与注释在同一行
show-source 打印生成相关错误/警告的源代码
statistics 计算每个错误/警告代码的出现次数并打印报告
enabled-extensions 启用默认关闭扩展
exit-zero 即使有错误,也强制 Flake8 使用退出状态代码 0
jobs 指定 Flake8 将用于并行运行检查的子进程数
output-file 将所有输出重定向到指定的文件
tee 如果已配置输出文件,还将输出打印到标准输出
append-config 提供额外的配置文件来解析
config 配置文件的路径
isolated 忽略任何配置文件并使用 Flake8
builtins 提供内置函数、对象、名称等的自定义列表
doctests 在 docstrings 中启用 doctests 的 PyFlakes 语法检查
include-in-doctest 指定 PyFlakes 检查哪些文件的 doctest 语法
exclude-from-doctest 指定 PyFlakes 不检查哪些文件的 doctest 语法

关于Flake8更多命令参考:flake8 –help

四、flake8插件

4.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 hacking
hacking插件安装完成之后,会新增一类错误返回码以H开头:H***:hacking返回的错误类型。
在hacking中有些错误类型检测是默认关闭的,可以通过命令行或者配置文件修改开关:enable-extensions= H106,H203

4.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报告:

六、与git hooks结合

安装 pre-commit:

pip install pre-commit

配置 .pre-commit-config.yaml

-   repo: https://github.com/pycqa/flake8
    rev: ''  # pick a git hash / tag to point to
    hooks:
    -   id: flake8

pre-commit install安装git hooks到你的.git/目录,即可。

要使用flake8插件,设置additional_dependencies :

-   id: flake8
    additional_dependencies: [flake8-docstrings]

七、参考文档

1、https://www.osgeo.cn/flake8/user/configuration.html

2、https://zhuanlan.zhihu.com/p/392178725

3、https://www.cnblogs.com/zhangningyang/p/8692546.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194341.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SAP Transaction Code

    SAP Transaction Code[@more@]F-01EnterSampleDocumentF-02EnterG/LAccountPostingF-03ClearG/LAccountF-04PostwithClearingF…

    2022年9月16日
    0
  • vue前端ui框架_详细讲解帕米尔的春天

    vue前端ui框架_详细讲解帕米尔的春天本文章描述的是Swagger3.0的内容,与Swagger2.0内容有较大差别。接口描述在3.0中通过Swagger规范(一个JSON文件)来描述,Swagger2.0是通过在接口中提供一系列注解来描述的。 1.集成Swagger    Swagger提供了一组静态页面,可以在SpringBoot应用中集成这些静态页面,直接访问静态页面,并打开指定的Swagger规范,就可以…

    2025年6月24日
    0
  • error link2019无法解析的外部符号_inferior

    error link2019无法解析的外部符号_inferior最近在用VS2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019。百度一下讲的并不够全面,反正都没解决我的问题。errorLNK2019问题在VC6.0中是errorLNK2001:unresolvedexternalsymbol问题,可能错误号改了。编译时出现类似这样的错误:Dlgcode.obj:errorLNK2019:无法解析的外部符号_readRe…

    2022年9月28日
    1
  • 连接ftp服务器 JDK 1.7

    连接ftp服务器 JDK 1.7

    2021年6月30日
    100
  • 小米4usb调试模式怎么打开_安卓打开USB调试模式

    小米4usb调试模式怎么打开_安卓打开USB调试模式我们要将小米4与电脑进行连接,就必须要打开小米4系统的调试模式,不同的系统版本打开调试模式的方法有所不同,在这里我们就谈谈小米4各种系统版本打开USB调试模式的方法。1、针对Android2.1-2.2版本的系统:我们在桌面按小米4手机上的“菜单键”会弹出菜单,点击“设置”选项进入系统的设置菜单列表,然后进入“应用程序”—“开发”,就可以看到“USB调试”选项,我们勾选即可。2、针…

    2022年9月13日
    0
  • 什么是波特率,波特率怎么计算[通俗易懂]

    什么是波特率,波特率怎么计算[通俗易懂]✍什么是波特率,波特率怎么计算➹概述:  ☆简而言之,串口传输的波特率即为每秒钟传输二进制的位数。  ☆脱离枯燥乏味的文字描述,我们用波形和数字来看看波特率是什么吧☟。  ☆说明:系统时钟50M,波特率115200。  基础知识:因果系统时钟-50M时钟周期150∗106{{\rm{1}}\over{{\rm{50*1}}{{\rm{0}}^{\rm{6}}}}}50∗1061​假设1个时钟周期可以计数1次(其实FPGA就是这样)50M时钟1s计数5000

    2022年4月20日
    96

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号