- 浏览: 17174 次
- 性别:
- 来自: 上海
最新评论
Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。目前 Pylint 的最新版本是 pylint-0.18.1。
- Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。
- Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。
- 如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
- 目前在 eclipse 的 pydev 插件中也集成了 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。(这一步好像有些问题,其实安装完成后,不需要这一步骤,否则pylint无法正确输出结果。)
6. 安装完成后,可以通过 pylint [options] module_or_package
来调用 Pylint 了。
pylint [options] module_or_package |
使用 Pylint 对一个模块 module.py 进行代码检查:
- 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 中显示。
-
-h
,
--help
显示所有帮助信息。
-
--generate-rcfile
可以使用 pylint --generate-rcfile 来生成一个配置文件示例。可以使用重定向把这个配置文件保存下来用做以后使用。也可以在前面加上其它选项,使这些选项的值被包含在这个产生的配置文件里。 如:
pylint --persistent=n --generate-rcfile > pylint.conf
, 查看 pylint.conf,可以看到 persistent=no,而不再是其默认值 yes。 -
--rcfile=<file>
指定一个配置文件。把使用的配置放在配置文件中,这样不仅规范了自己代码,也可以方便地和别人共享这些规范。
-
-i <y_or_n>, --include-ids=<y_or_n>
在输出中包含 message 的 id, 然后通过
pylint --help-msg=<msg-id>
来 查看这个错误的详细信息,这样可以具体地定位错误。 -
-r <y_or_n>, --reports=<y_or_n>
默认是 y, 表示 Pylint 的输出中除了包含源代码分析部分,也包含报告部分。
-
--files-output=<y_or_n>
将每个 module /package 的 message 输出到一个以 pylint_module/package. [txt|html] 命名的文件中,如果有 report 的话,输出到名为 pylint_global.[txt|html] 的文件中。默认是输出到屏幕上不输出到文件里。
-
-f <format>, --output-format=<format>
设置输出格式。可以选择的格式有 text, parseable, colorized, msvs (visual studio) 和 html, 默认的输出格式是 text。
-
--disable-msg=
<msg ids>
禁止指定 id 的 message. 比如说输出中包含了 W0402 这个 warning 的 message, 如果不希望它在输出中出现,可以使用
--disable-msg= W0402
Pylint的默认输出格式是原始文
本(raw text)格式 ,可以通过 -f <format>,--output-format=<format> 来指定别的输出格式如
html等 等。在
Pylint的输出中有如下两个部分:源代码分析部分
和报告部分。
源代码分析部分:
对于每一个 Python 模块,Pylint 的结果中首先显示一些"*"字符 , 后面紧跟模块的名字,然后是一系列的 message, message 的格式如下:
MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE |
MESSAGE_TYPE 有如下几种:
(C) 惯例。违反了编码风格标准
(R) 重构。写得非常糟糕的代码。
(W) 警告。某些 Python 特定的问题。
(E) 错误。很可能是代码中的错误。
(F) 致命错误。阻止 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%。
- 错误,警告的总数量。
下面是一个从 xml 文件中读取一些值并显示出来的一段 Python 代码 dw.py,代码如下:
<IBM> <DW> <linux id="100" name="python" count="3000" /> </DW> </IBM> |
这时候使用 Pylint 的结果(这是从 html 格式的输出中拷贝的)为:
************* Module dw C:1:Missing docstring C:5:Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^ C:5:Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C:6:Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) Report 部分省略 |
输出中第一部分是源代码分析,第二部分是报告。输出结果中有这么多信息,从哪里开始分析呢?首先使用如下的步骤来分析代码:
1. 因为输出结果太长,所以可以先不让它输出报告部分,先根据源代码分析部分来找出代码中的问题。使用选项 "--reports=n"
。
2. 使用选项 "--include-ids=y"
。可以获取到源代码分析部分每条信息的 ID。
清单 6. 使用 pylint --reports=n --include-ids=y dw.py 的结果
************* Module dw C0111: 1: Missing docstring C0322: 5: Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^ C0103: 5: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C0103: 6: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) |
每个信息前面都会加上一个 id, 如果不理解这个信息的意思,可以通过 pylint --help-msg=id
来 查看。
清单 7. 使用 pylint --help-msg= C0111 的结果
C0111: *Missing docstring* Used when a module, function, class or method has no docstring. Some special methods like __init__ doesn't necessary require a docstring. This message belongs to the basic checker. |
3. 开始分析每个源代码中的问题。从上面知道,第一个问题的原因是缺少 docstring
,在代码中增加 docstring
, 修改后的代码如下:
#!/usr/bin/env python """This script parse the content of a xml file""" import xml.dom.minidom xmlDom=xml.dom.minidom.parse("identity.xml") organizations = xmlDom.getElementsByTagName('DW') for org in organizations: products = org.getElementsByTagName('linux') for product in products: print 'ID: ' + product.getAttribute('id') print 'Name: ' + product.getAttribute('name') print 'Word Count: ' + product.getAttribute('count') |
重新运行 pylint --reports=n --include-ids=y dw.py
,结果为:
************* Module dw C0322: 7: Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^ C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) |
可以看到源代码中的第一个问题已被解决。
4. 关于第二个 C0322 的问题,这里的分析结果说明得比较清楚,是代码第七行中的等号运算符两边没有空格。我们在这里加上空格,重新运行 pylint --reports=n --include-ids=y dw.py
,结果为:
************* Module dw C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) |
5. 可以看到现在问题只剩下 C0103 了。这里的意思是变量命名规则应该符合后面正则表达式的规定。Pylint 定义了一系列针对变量,函数,类等的名字的命名规则。实际中我们不一定要使用这样的命名规则,我们可以定义使用正则表达式定义自己的命名规则,比如使用选 项 --const-rgx='[a-z_][a-z0-9_]{2,30}$'
,我们将变量 xmlDom
改 为 xmldom
, 代码如下:
清单 11. 将变量 xmlDom 改为 xmldom 后的源码
#!/usr/bin/env python """This script parse the content of a xml file""" import xml.dom.minidom xmldom = xml.dom.minidom.parse("identity.xml") organizations = xmldom.getElementsByTagName('DW') for org in organizations: products = org.getElementsByTagName('linux') for product in products: print 'ID: ' + product.getAttribute('id') print 'Name: ' + product.getAttribute('name') print 'Word Count: ' + product.getAttribute('count') |
运行 pylint --reports=n --include-ids=y --const-rgx='[a-z_][a-z0-9_]{2,30}$' dw.py
,结果中就没有任何问题了。
6. 如果希望一个组里的人都使用这些统一的规则,来规范一个部门的代码风格。比如说大家都使用 --const-rgx='[a-z_][a-z0-9_]{2,30}$'
作 为命名规则,那么一个比较便捷的方法是使用配置文件。
使用 pylint --generate-rcfile > pylint.conf
来生成一个示例配置 文件,然后编辑其中的 --const-rgx
选项。或者也可以直接 pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' --generate-rcfile > pylint.conf
, 这样生成的配置文件中 --const-rgx
选项直接就是 '[a-z_][a-z0-9_]{2,30}$'
了。
以后运行 Pylint 的时候指定配置文件:pylint --rcfile=pylint.conf dw.py
这样 Pylint 就会按照配置文件 pylint.conf
中的选项来指定参数。在一个部门中,大家可以共同 使用同一个配置文件,这样就可以保持一致的代码风格。
7. 如果把 report 部分加上,即不使用 --reports=
n,可以看到报告部分的内容
。
本文通过详细的理论介绍和简单易懂的实例全面介绍了 Python 代码分析工具 Pylint。相信读者看完后一定可以轻松地将 Pylint 运用到自己的开发工程中。
发表评论
-
linux 操作系统下进程启停控制脚本
2012-10-08 16:20 1054#! /usr/bin/env python impo ... -
python进制总结
2012-04-30 22:24 816进制转换 10进制转2进制:bin(123) 2进制转 ... -
Python模块学习 ---- subprocess 创建子进程
2011-10-11 23:45 1371转自(http://blog.csdn.net/JGoo ... -
Python读写配置文件
2011-08-24 21:24 1643话不多说,贴代码: config=ConfigParser. ... -
py2exe 打包遇到的问题
2011-08-20 22:05 1343上迭代中遇到的问题了,打包后的程序不能在干净的机器上运行,而这 ... -
python访问IBM WebSphere MQ队列遇到的问题
2011-08-15 18:35 3365最近一直在忙一个自动化系统的项目,项目为CS架构, ...
相关推荐
总的来说,Pylint作为一款强大的Python代码分析工具,即使在Python 2.7这样的旧版本环境下,也能为开发者提供宝贵的帮助,提升代码质量和可维护性。然而,随着Python 2的逐渐淘汰,建议开发者尽可能地转向Python 3,...
### 使用PyCharm和Pylint检查Python代码规范操作 #### 概述 本文将详细介绍如何利用PyCharm集成环境和Pylint工具来检查Python代码的规范性,并确保其符合PEP8标准。PEP8是Python社区推荐的代码风格指南,遵循这一...
Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。目前 Pylint 的最新版本是 pylint...
`pylint`是一款广泛使用的Python代码质量检查工具,它能够帮助开发者遵循最佳实践、提高代码可读性和避免潜在错误。`pylint-3.0.0a1-py3-none-any.whl`是这个库的一个特定版本,适用于Python 3环境,且不受平台限制...
* 使用 PyLint 工具来检查代码的语法和逻辑错误。 注释 Python 编程规范中,对注释也有明确的规定。例如: * 注释块通常用来描述函数、类或模块的功能和用途。 * 行内注释通常用来描述单个语句的功能和用途。 * ...
Google Python 风格指南是一份专门为Python编程语言制定的规范文档,由Google公司提供,旨在指导开发者编写清晰、规范的Python代码。该风格指南分为几个部分,包括Python语言规范、Python风格规范以及一些额外的建议...
1. **代码风格检查**:Pylint严格按照PEP 8标准,对代码进行格式化检查,包括缩进、空格使用、注释规范等。 2. **错误与警告**:能识别并报告语法错误、类型错误、未初始化的变量、未使用的变量等常见问题。 3. **...
2. 代码风格检查:确保代码符合 PEP 8 标准,例如检查代码行长度、缩进和空格使用。 3. 变量命名检查:验证变量名是否符合 Python 的命名约定。 4. 接口检查:确认声明的函数或方法是否已正确实现。 5. 可能的问题...
1. **代码风格检查**:`pylint`依据PEP8(Python Enhancement Proposals 8)标准,对代码进行风格检查,包括缩进、空格使用、命名规范等,确保代码整洁一致。 2. **潜在错误检测**:`pylint`能检测出未使用的变量、...
`pylint`是一个著名的Python代码质量检查工具,它主要用于静态代码分析,旨在提高代码的可读性和一致性,减少错误,并遵循PEP8编码规范。`pylint-0.21.1.tar.gz`是一个包含`pylint`版本0.21.1的压缩包文件,通常以....
1. **代码风格检查**:PyLint1.1.0能够检查Python代码是否符合PEP8的编码风格,包括但不限于缩进、空格使用、命名约定、行长度限制等。这对于团队协作和代码审查至关重要,因为统一的代码风格能提高代码的可读性。 ...
总结,Pylint是一个功能强大的Python代码质量检查工具,它不仅可以帮助开发团队规范代码风格,避免编程错误,还能提升代码的整体质量和可维护性。在实际应用中,合理利用Pylint的高可配置性,结合项目实际需求,可以...
`pylint`是其中一个非常著名的库,它是一个代码质量检查器,用于静态分析Python代码,帮助开发者找出潜在的错误、不符合编码规范的地方以及性能瓶颈。 `pylint-1.6.0-py2.py3-none-any.whl` 是一个针对Python的可...
总的来说,`pylint_junit`是Python开发中一个非常实用的工具,它将静态代码分析与自动化测试紧密结合起来,推动了开发过程的标准化和规范化。通过掌握并熟练使用这个库,开发者不仅可以提升个人编程技能,还能为团队...
《PyPI官网下载 | pylint-1.7.3.tar.gz:深入理解Python代码质量检查工具》 在Python的生态系统中,PyPI(Python Package Index)是最...对于任何致力于编写高质量Python代码的人来说,Pylint都是一个不可或缺的伙伴。
- **代码风格检查**:`oca-pylint-plugin`扩展了`pylint`对Python PEP8编码规范的检查,确保代码风格的一致性和可读性。 - **错误与警告**:插件能检测出潜在的运行时错误,如未使用的变量、未定义的函数或类,...
Google开源项目风格指南提供了一系列关于Python代码风格的建议和规则,帮助开发者编写清晰、一致的代码。 首先,关于使用pylint工具,这是在Python编程中常用来发现代码问题和规范性错误的静态代码分析工具。pylint...