简介

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

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

2)Pep8: 静态检查PEP8编码风格的工具。

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

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

官方文档: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,归类为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。

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

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

Python静态代码检查工具Flake8的更多相关文章

  1. [原创]Java静态代码检查工具介绍

    [原创]Java静态代码检查工具介绍 一  什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...

  2. 静态代码检查工具 cppcheck 的使用

      CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...

  3. 静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

    CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的 ...

  4. C#静态代码检查工具StyleCode

    C#静态代码检查工具StyleCode -- 初探 最近我们Advent Data Service (ADS) 在项目上需要按照代码规范进行代码的编写工作,以方便将来代码的阅读与维护. 但是人工检查起 ...

  5. PC-lint 简明教程(C/C++静态代码检查工具)

    前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误.在很多专业的软件公司如Microsoft,PC-Lint检查无错误无 ...

  6. 基于Source Insight_Scan的C/C++静态代码检查工具安装说明

    基于Source Insight_Scan的C/C++静态代码检查工具安装说明   本文链接:https://blog.csdn.net/M19930517/article/details/79977 ...

  7. 静态代码检查工具-PMD初学者入门篇

    前言: PMD是一款静态代码分析工具,它能够自动检测各种潜在缺陷以及不安全或未优化的代码. PMD更多地是集中在预先检测缺陷上,它提供了高度可配置的丰富规则集,用户可以方便配置对待特定项目使用那些规则 ...

  8. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

  9. 静态代码检查工具-PMD刚開始学习的人入门篇

    前言: PMD是一款静态代码分析工具.它能够自己主动检測各种潜在缺陷以及不安全或未优化的代码. PMD很多其它地是集中在预先检測缺陷上.它提供了高度可配置的丰富规则集,用户能够方便配置对待特定项目使用 ...

随机推荐

  1. Linux内核分析第三周——构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  2. C++之正则表达式20171121

    准确来说,不论在C++或C中,只要在Linux系统中都可以使用本文讲诉的正则表达式使用方式. 一.Linux中正则表达式的使用步骤: 编译正则表达式 regcomp() 匹配正则表达式 regexec ...

  3. 《JavaScript高级程序设计(第三版)》-3

    相等操作符 相等和不相等 在转换不同的数据类型时,相等和不想等操作符遵循下面基本规则: 如果有一个操作符数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1: 如果 ...

  4. Codeforces Round #299 (Div. 2)A B C 水 dfs 二分

    A. Tavas and Nafas time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. php使用时间戳保存时间的意义

    时间戳记录的是格林尼治时间,使用date格式化的时候会根据你程序设置的不同时区显示不同的时间. 如果使用具体时间,则还需要进行多一步转换.

  6. \G,sql中select 如果太长,可以在后面放\G,竖行显示~~~~

    1.使用\G按行垂直显示结果 如果一行很长,需要这行显示的话,看起结果来就非常的难受. 在SQL语句或者命令后使用\G而不是分号结尾,可以将每一行的值垂直输出. mysql> select * ...

  7. AES和RSA混合加密技术在网络数据传输中的应用

    原文:http://www.fx361.com/page/2017/0110/519967.shtml          摘要:文章通过分析和比较AES加密算法和RsA加密算法的实现过程和各自的特点, ...

  8. extjs6需要引入文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. MySQL VS PostgreSQL:该选择哪个开源数据库?

    Naresh Kumar 是一位软件工程师与热情的博主,对编程与新事物充满了激情和兴趣.近日,Naresh撰写了一篇博文,对开源世界最常见的两种数据库 MySQL 与 PostgreSQL 的特点进行 ...

  10. Map集合的两种取出方式

    Map集合有两种取出方式, 1.keySet:将Map中的键存入Set集合,利用set的迭代器来处理所有的键 举例代码如下: import java.util.*; class Test { publ ...