利用pylint 检测 python源码。

Pylint 提供了简单的方式来分析 Python 代码,其高可配置性很容易使一个部门的人员使用统一的代码风格。

Pylint 是什么

Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。目前 Pylint 的最新版本是 pylint-0.18.1。

  • Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。
  • Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。
  • 如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
  • 目前在 eclipse 的 pydev 插件中也集成了 Pylint。

Pylint 的最新包下载:http://www.logilab.org/project/pylint

Pylint 的安装

Pylint 可以用于所有高于或者等于 2.2 的 Python 版本兼容。需要 logilab-astng(version >= 0.14)和 logilab-common(version >= 0.13)的包(具体信息,请参阅 参考资料),如果是 Python 版本低于 2.3,那么它还需要 optik 包(本文接下来的示例暂不考虑这种情况)。

Pylint 所用到的所有的包的下载地址

logilab-astng 的最新包下载:http://www.logilab.org/856/

logilab-common 的最新包下载:http://www.logilab.org/848/

optik 的包下载:http://optik.sourceforge.net/

Pylint 的最新包下载:http://www.logilab.org/project/pylint

Pylint 在 Linux 上的安装

1. 在 Linux 上,首先安装 Python 的包(高于版本 2.2),并在环境变量 $PATH 中添加 Python 可执行文件的路径。

2. 下载 Pylint、logilab-astng (version >= 0.14) 和 logilab-common (version >= 0.13) 的包 , 使用 tar zxvf *.tar.gz解压缩这些包。

3. 依次进入 logilab-astng、logilab-common 和 Pylint 解开的文件夹中,运行命令 Python setup.py install来安装。

4. 安装完成后,就可以通过 pylint [options] module_or_package来调用 Pylint 了。

Pylint 在 Windows 上的安装

1. 安装 Python 的包(高于版本 2.2),右键单击桌面上的我的电脑图标,选择属性,高级,环境变量,在 $PATH 中添加 Python 的安装路径,如 C:\Python26\。

2. 使用解压缩工具解压缩所有的包。

3. 打开命令行窗口,使用 cd依次进入 logilab-astng、logilab-common 和 Pylint 解开的文件夹中,运行命令 python setup.py install来安装。

4. 安装完成后,在 Python 的安装路径下出现一个 Scripts 文件夹,里面包含一些 bat 脚本,如 pylint.bat 等。

5. 为了使调用 pylint.bat 的时候不需要输入完整路径,在 Python 的安装目录下创建 pylint.bat 的重定向文件,这是一个纯文本文件 pylint.bat,里面包含 pylint.bat 的实际路径,如:C:\Python26\Scripts\pylint.bat。

6. 安装完成后,可以通过 pylint [options] module_or_package来调用 Pylint 了。

命令

  使用命令 pylint --help 或 man pylint 查看更详细的用法。

Usage:  pylint [options] module_or_package

  Check that a module satisfies a coding standard (and more !).

    pylint --help

  Display this help message and exit.

    pylint --help-msg <msg-id>[,<msg-id>]

  Display help messages about given message identifiers and exit.

Options:
--version show program's version number and exit
-h, --help show this help message and exit
              显示所有帮助信息。
--long-help more verbose help. Master:
--rcfile=<file> Specify a configuration file.
              指定一个配置文件。把使用的配置放在配置文件中,这样不仅规范了自己代码,也可以方便地和别人共享这些规范。
--init-hook=<code> Python code to execute, usually for sys.path manipulation such as pygtk.require().
-E, --errors-only In error mode, checkers without error messages are
disabled and for others, only the ERROR messages are
displayed, and no reports are done by default
--py3k In Python 3 porting mode, all checkers will be
disabled and only messages emitted by the porting
checker will be displayed
--ignore=<file>[,<file>...]
Add files or directories to the blacklist. They should
be base names, not paths. [current: CVS]
--ignore-patterns=<pattern>[,<pattern>...]
Add files or directories matching the regex patterns
to the blacklist. The regex matches against base
names, not paths. [current: none]
--persistent=<y_or_n>
Pickle collected data for later comparisons. [current:
yes]
--load-plugins=<modules>
List of plugins (as comma separated values of python
modules names) to load, usually to register additional
checkers. [current: none]
-j <n-processes>, --jobs=<n-processes>
Use multiple processes to speed up Pylint. [current:
1]
--extension-pkg-whitelist=<pkg[,pkg]>
A comma-separated list of package or module names from
where C extensions may be loaded. Extensions are
loading into the active Python interpreter and may run
arbitrary code [current: none]
--optimize-ast=<yn>
Allow optimization of some AST trees. This will
activate a peephole AST optimizer, which will apply
various small optimizations. For instance, it can be
used to obtain the result of joining multiple strings
with the addition operator. Joining a lot of strings
can lead to a maximum recursion error in Pylint and
this flag can prevent that. It has one side effect,
the resulting AST will be different than the one from
reality. This option is deprecated and it will be
removed in Pylint 2.0. [current: no] Commands:
--help-msg=<msg-id>
Display a help message for the given message id and
exit. The value may be a comma separated list of
message ids.
--list-msgs Generate pylint's messages.
--list-conf-levels Generate pylint's messages.
--full-documentation
Generate pylint's full documentation.
--generate-rcfile Generate a sample configuration file according to the
current configuration. You can put other options
before this one to get them in the generated
configuration.
              可以使用 pylint --generate-rcfile 来生成一个配置文件示例。可以使用重定向把这个配置文件保存下来用做以后使用。也可以在前面加上其它选项,使这些选项的值被包含在这个产生的配置文件里。如:pylint --persistent=n --generate-rcfile > pylint.conf,查看 pylint.conf,可以看到 persistent=no,而不再是其默认值 yes。 Messages control:
--confidence=<levels>
Only show warnings with the listed confidence levels.
Leave empty to show all. Valid levels: HIGH,
INFERENCE, INFERENCE_FAILURE, UNDEFINED [current:
none]
-e <msg ids>, --enable=<msg ids>
Enable the message, report, category or checker with
the given id(s). You can either give multiple
identifier separated by comma (,) or put this option
multiple time (only on the command line, not in the
configuration file where it should appear only once).
See also the "--disable" option for examples.
-d <msg ids>, --disable=<msg ids>
Disable the message, report, category or checker with
the given id(s). You can either give multiple
identifiers separated by comma (,) or put this option
multiple times (only on the command line, not in the
configuration file where it should appear only
once).You can also use "--disable=all" to disable
everything first and then reenable specific checks.
For example, if you want to run only the similarities
checker, you can use "--disable=all
--enable=similarities". If you want to run only the
classes checker, but have no Warning level messages
displayed, use"--disable=all --enable=classes
--disable=W"
禁止指定 id 的 message. 比如说输出中包含了 W0402 这个 warning 的 message, 如果不希望它在输出中出现,可以使用 --disable-msg= W0402 Reports:
-f <format>, --output-format=<format>
Set the output format. Available formats are text, parseable, colorized, msvs (visual studio) and html. You can also give a reporter class, eg mypackage.mymodule.MyReporterClass. [current: text]
              设置输出格式。可以选择的格式有 text, parseable, colorized, msvs (visual studio) 和 html, 默认的输出格式是 text。
--files-output=<y_or_n>
Put messages in a separate file for each module / package specified on the command line instead of printing them on stdout. Reports (if any) will be written in a file name "pylint_global.[txt|html]".
This option is deprecated and it will be removed in Pylint 2.0. [current: no]
              将每个 module /package 的 message 输出到一个以 pylint_module/package. [txt|html] 命名的文件中,如果有 report 的话,输出到名为 pylint_global.[txt|html] 的文件中。默认是输出到屏幕上不输出到文件里。
-r <y_or_n>, --reports=<y_or_n>
Tells whether to display a full report or only the messages [current: yes]
              默认是 y, 表示 Pylint 的输出中除了包含源代码分析部分,也包含报告部分。
--evaluation=<python_expression>
Python expression which should return a note less than
10 (10 is the highest note). You have access to the
variables errors warning, statement which respectively
contain the number of errors / warnings messages and
the total number of statements analyzed. This is used
by the global evaluation report (RP0004). [current:
10.0 - ((float(5 * error + warning + refactor +
convention) / statement) * 10)]
--msg-template=<template>
Template used to display messages. This is a python
new-style format string used to format the message
information. See doc for all details

  

配置

  使用如下命令 

#pylint --generate-rcfile  > pylint.conf  

  生成一个配置文件模板,然后可以根据这个模板作个性化修改以适应具体项目的需求。

  配置文件的模板参见pylint.conf 。 可以在模板文件上定制相关的统一的配置文件。配置文件中包含了master, message control, reports, typecheck, similarities, basic, variables, format, design, classes, imports, exception相关的lint配置信息,用户可以进行私人订制

  

  修改部分说明:

  disable=I0011

  禁止 locally-disabled 类型的消息输出。

  output-format=colorized 

  配置输出着色。

  reports=no  

  不显示完整的报告,只显示消息。

  const-rgx=[a-z_][a-z0-9_]{2,30}$  

  配置模块级别的常量和变量的命名规则(以小写字母或下划线开头后续跟着小写字母或数字或下划线,2到30个字符)。

  good-names=i,j,k,n,ex,Run,_  

  添加一个总是接受的命名 “n”。

  最新版的pylint已经废弃 --include-ids=<y_or_n>, -i <y_or_n> 选项,可在配置文件里修改输出消息的格式:

  msg-template='{msg_id}:{line:3d}, {column}: {msg} ({symbol})'

Pylint 的输出

  Pylint的默认输出格式是原始文本(raw text)格式 ,可以通过 -f <format>,--output-format=<format> 来指定别的输出格式如html等等。在Pylint的输出中有如下两个部分:源代码分析部分和报告部分。

源代码分析部分:

  对于每一个 Python 模块,Pylint 的结果中首先显示一些"*"字符 , 后面紧跟模块的名字,然后是一系列的 message, message 的格式如下:

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

  MESSAGE_TYPE 有如下几种:

  (C) convention 惯例。违反了编码风格标准

  (R) refactor 重构。写得非常糟糕的代码。

  (W) warning 警告。某些 Python 特定的问题。

  (E) error 错误。很可能是代码中的错误。

  (F) fatal 致命错误。阻止 Pylint 进一步运行的错误。

************* Module utils
C: 88:Message: Missing docstring
R: 88:Message: Too few public methods (0/2)
C:183:MessagesHandlerMixIn._cat_ids: Missing docstring
R:183:MessagesHandlerMixIn._cat_ids: Method could be a function
R:282:MessagesHandlerMixIn.list_messages: Too many branches (14/12)

报告部分:

  在源代码分析结束后面,会有一系列的报告,每个报告关注于项目的某些方面,如每种类别的 message 的数目,模块的依赖关系等等。具体来说,报告中会包含如下的方面:

  • 检查的 module 的个数。
  • 对于每个 module, 错误和警告在其中所占的百分比。比如有两个 module A 和 B, 如果一共检查出来 4 个错误,1 个错误是在 A 中,3 个错误是在 B 中,那么 A 的错误的百分比是 25%, B 的错误的百分比是 75%。
  • 错误,警告的总数量。

使用

  使用 Pylint 对一个模块 module.py 进行代码检查:

pylint [options] module_or_package
    • 1. 进入这个模块所在的文件夹,运行 pylint [options] module.py
      这种调用方式是一直可以工作的,因为当前的工作目录会被自动加入 Python 的路径中。
    • 2. 不进入模块所在的文件夹,运行 pylint [options] directory/module.py
      这种调用方式当如下条件满足的时候是可以工作的:directory 是个 Python 包 ( 比如包含一个 __init__.py 文件 ),或者 directory 被加入了 Python 的路径中。

 使用 Pylint 对一个包 pakage 进行代码检查:

    • 1. 进入这个包所在文件夹,运行 pylint [options] pakage。
      这种调用方式是一直可以工作的,因为当前的工作目录会被自动加入 Python 的路径中。
    • 2. 不进入包所在的文件夹,运行 pylint [options] directory/ pakage。
      这种情况下当如下条件满足的时候是可以工作的:directory 被加入了 Python 的路径中。比如在 Linux 上,export PYTHONPATH=$PYTHONPATH: directory。

    此外,对于安装了 tkinter 包的机器,可以使用命令 pylint-gui打开一个简单的 GUI 界面,在这里输入模块或者包的名字 ( 规则同命令行 ), 点击 Run,Pylint 的输出会在 GUI 中显示。

在代码中关闭某个告警消息:

    模块级别:

#! usr/bin/python
#pylint: disable=invalid-name ''' Docstring... '''

    行级别:

def file_travesal(dirtectory='.', file_list=[]): # pylint: disable=W0102
'''
Get file list from the directory including files in its subdirectories.
'''
file_list += [join(dirtectory, f) for f in listdir(dirtectory)
if isfile(join(dirtectory, f))]
for item in listdir(dirtectory):
if isdir(join(dirtectory, item)):
file_travesal(join(dirtectory, item), file_list)

  添加命令别名(配置文件在用户目录“~/”下):

echo "alias pylt='pylint --rcfile=~/pylint.conf'" >> ~/.bashrc

  怎么更改pylint的默认配置文件

  pylint安装成功后,可以通过运行"pylint --help"来快速查看pylint的帮助信息;相关信息基本能够支撑起快速使用起来pylint的基本功能。
  可以通过"pylint --generate-rcfile"生成配置文件模板,可以在模板文件上定制相关的统一的配置文件。配置文件中包含了master, message control, reports, typecheck, similarities,  basic, variables, format, design, classes, imports, exception相关的lint配置信息,用户可以进行私人订制。

jenkins中的violations插件
 https://wiki.jenkins-ci.org/display/JENKINS/Violations
  

参考

  http://www.ibm.com/developerworks/cn/linux/l-cn-pylint/

  https://wiki.jenkins-ci.org/display/JENKINS/Violations

pylint & jenkins的更多相关文章

  1. jenkins 中 violation使用pylint

    在jenkins中无法打开源码问题: 1. 在 Report Violations的 Source encoding 设置为 项目文件的编码, 如: utf-8.  缺省是 default. 2. 在 ...

  2. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  3. Jenkins and Python

    https://jenkins.io/solutions/python/ In the Python ecosystem there are tools which can be integrated ...

  4. Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)

    原始链接:http://blog.csdn.net/a464057216/article/details/52934077 requirments OS: Ubuntu 14.04+ Gitlab 8 ...

  5. 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)

    让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett   译文出处:linux中国-Hank Chow    检查你的代码的质 ...

  6. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  7. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  8. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

  9. 项目持续集成环境(jenkins + SVN + maven + tomcat)

    整体流程 每次SVN上代码有变动,触发自动构建动作,并部署到服务器的tomcat上,具体流程: 1.SVN上提交代码修改 2.maven执行Goals 3.将web工程打成war包 4.关闭服务器的t ...

随机推荐

  1. 读书笔记3(Teamwork)

    今天我阅读了<构建之法>的第四章——两人合作,它主要讲述了在两人合作进行项目时与单人作业时的区别与不同,其中最重要的就是代码规范.代码规范:我们写的代码虽然是电脑运行,但是最终还是给人看的 ...

  2. 9、python中的控制流

    学习完python的基础与数据后,我们就可以编写一些简单的命令了.但这时我们发现,目前位置写出来的程序都是自上而下顺序地执行的.要想程序改变这种自上而下的流程多一点变化,我们就要学习三种程序中的语句. ...

  3. C语言用一维数组打印杨辉三角(原:无意中想到)

    本贴地址 ] = { }; a[] = , a[] = ; int i, j,m; ; i <= ; i++) //2-11 输出10行 { ; j > ; j--) //关键在这句,倒着 ...

  4. Python入职面试,可能会被企业HR问到的问题,你准备好了吗

     整理了一下这两次面试问的问题先说简单的:    1.是否了解互联网协议七层模型    2.简单说一下TCP协议    3.你写的项目里用户数据安全如何保证?(比如用户密码加密处理一下)开放式问题,回 ...

  5. 【NOIP 2012】借教室

    题目 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望 ...

  6. Python+Selenium练习篇之20-处理Alert弹窗

    本文来介绍如何通过Selenium方法去处理网页Alert弹窗,和处理iframe类似,都是通过switch_to方法.这里还是没有找到合适的alert弹窗网站,我们就自己创建一个吧,前面文章介绍了如 ...

  7. JWT实现token的生成和认证demo

    上篇写到对JWT的理解,这篇写一个小的demo来实践下 Github:https://github.com/wuhen152033/token/tree/dev 简介 本次的demo是基于Spring ...

  8. [python工具][pycharm]pycharm licence activation失效的解决方法

    推荐网站: http://idea.lanyus.com/ 1 请将“0.0.0.0 account.jetbrains.com”添加到C:\Windows\System32\Drivers\etc\ ...

  9. Mybatis通过接口的方式实现增删改查

    导入jar包 [mybatis] [oracle] 生成数据库 1.添加Mybatis的配置文件mybatis-config.xml 在src目录下创建一个mybatis-config.xml文件,如 ...

  10. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...