目录
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
Python作为一种简单易学且功能强大的编程语言,吸引了越来越多的我们。然而,由于Python的灵活性和宽松的语法规则,代码质量的控制成为一个挑战。为了解决这个问题,我将介绍一个受欢迎的工具-pylint,它可以帮助我们提升Python代码的质量。
pylint是一个Python代码检查工具,它可以静态分析Python代码并发现潜在的问题。它不仅可以检查代码的语法错误,还可以检查代码的风格、命名规范、代码复杂度等方面的问题。pylint基于PEP 8规范和其他最佳实践,提供了一系列的规则来评估代码的质量,并给出相应的建议和修复方法。
本篇文章《Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南》属于【Python代码规范与扫描】系列内容的第四篇,前面三篇可以根据自己情况自行查阅,同时欢迎公众号CTO Plus后续的文章:
代码规范与静态扫描系列内容:
- 《企业级Python代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码自动编排介绍》
- 《通读Python PEP8代码规范》
- 《Python代码扫描:新一代 Python Linter工具Ruff》
- 《Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南》
- 《Python代码扫描:轻量级Python静态代码分析工具pyflakes》
- 《Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践》
- 《Python代码扫描:静态类型检查的最佳选择mypy》
- 《Python代码扫描:自动化移除Python代码中的冗余-autoflake使用技巧与实例》
- 《Python代码扫描:Python代码格式化的利器-yapf详解与最佳实践》
- 《Python代码扫描:一键格式化Python代码的黑魔法-black使用教程》
- 《Python代码扫描:导入语句自动排序工具-isort使用指南与示例》
- 《Python代码扫描:自动化修复Python代码风格的工具-autopep8详解与实例》
- 《Python代码扫描:项目中的代码规范与错误检查-pyproject-flake8配置与使用方法》
- 《Python代码扫描:企业级代码代码安全漏洞扫描Bandit》
介绍
Pylint 是一个Python代码分析工具,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8)规范和常见错误的库,比如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等,如果写的代码不符合 PEP-8编码规范,它就会给我们报错。它在一些流行的编辑器和 IDE 中都有集成,也可以单独从命令行运行。
可以通过修改 pylint 的配置文件,修改它检查的方式,从而使它遵守其他的编码规范,比如可以强行让变量名函数名都变成驼峰命名法。使用 Pylint 方便团队形成统一的编码规范。
pylint的特点
pylint具有以下几个特点:
1. 丰富的规则集:pylint提供了大量的规则,涵盖了代码风格、命名规范、代码复杂度等方面的问题。我们可以根据自己的需求选择合适的规则进行检查。
2. 可自定义的规则:pylint支持自定义规则,我们可以根据项目的需求定义自己的规则,以满足特定的代码质量要求。
3. 详细的报告:pylint生成详细的报告,包括每个问题的描述、位置和建议的修复方法。这些报告可以帮助我们快速定位和解决代码中的问题。
4. 易于集成:pylint可以与其他工具集成,如编辑器、持续集成系统等。它可以在代码编写的过程中实时检查代码,并在提交代码前进行检查,以确保代码的质量。
安装&配置
接下来我们开始安装pylint,可以通过pip命令安装pylint,如下所示:
pip install pylint
- Pycharm中设置
Arguments:$FilePath$
- Pycharm中指定配置文件方式
- Pycharm中添加参数屏蔽自定类型的检查
disable=W,E,R,C
使用案例
运行 pylint [options] path/to/dir
或者 pylint [options] path/to/module.py
就可以在命令行中使用 Pylint,它会向控制台输出代码中违反规范和出现错误的地方。
还可以使用 pylintrc
配置文件来自定义 Pylint 对哪些代码错误进行检查。
命令行参数
- -h, –help
显示所有帮助信息。
- --generate-rcfile
可以使用 pylint --generate-rcfile 来生成一个配置文件示例。可以使用重定向把这个配置文件保存下来用做以后使用。
pylint --generate-rcfile > pylint.conf
- --rcfile=<xx.conf>
指定一个配置文件运行pylint。把使用的配置放在配置文件中,这样不仅规范了自己代码,也可以方便地和别人共享这些规范。
pylint --rcfile=pylint.conf dw.py
- --reports=<y_or_n>
默认是 n, 表示 Pylint 的输出中除了包含源代码分析部分,也包含报告部分。
pylint --rcfile=pylintrc.conf --reports=y main.py
报告中安装上述的格式生成检查结果,W代表生成的检查级别,级别分为4种:error, warning, refactor, convention;可以根据首字母来对应相应的级别。“10, 0” 代表告警所在源码文件中的行号和列号。“Unused import help"表述问题的详细信息。”(unused-import)为问题的消息ID信息。
下面的信息是按照消息的类别进行分类,对4种级别的告警信息进行汇总:
- --help-msg=
获取告警帮助信息。
如需对某告警类型获取帮助信息,可以使用"pylint --help-msg "命令来获取:
pylint --help-msg=C0114
在输出中包含 message 的 id, 然后通过 pylint --help-msg=来查看这个错误的详细信息,这样可以具体地定位错误。
- --output-format=
设置输出格式。可以选择的格式有 text, parseable, colorized, msvs (visual studio) , 默认的输出格式是 text。
pylint --output-format=msvs external.py
- xx.txt
将每个 module /package 的 message 输出到一个以 pylint_module/package.txt命名的文件中,如果有 report 的话,输出到名为 pylint_global.[txt|html] 的文件中。默认是输出到屏幕上不输出到文件里。
pylint --output-format=msvs external.py > test.txt
Pylint的输出
Pylint的默认输出格式是原始文本(raw text)格式 ,可以通过-f ,--output-format= 来指定别的输出格式如html等等。在Pylint的输出中有如下两个部分:源代码分析部分和报告部分。
源代码分析部分:
对于每一个 Python 模块,Pylint 的结果中首先显示一些"*"字符 , 后面紧跟模块的名字,然后是一系列的 message, message 的格式如下:
MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE
MESSAGE_TYPE 有如下几种:
(C) 惯例。违反了编码风格标准
(R) 重构。写得非常糟糕的代码。
(W) 警告。某些 Python 特定的问题。
(E) 错误。很可能是代码中的错误。
(F) 致命错误。阻止 Pylint 进一步运行的错误。
忽略某个文件不进行检查
对external.py不检查,在文件中设置: # pylint: skip-file
# pylint: skip-file
from pysdk.first_layer import BaseLayer
class Events(BaseLayer):
def __init__(self):
# pylint: disable=C0115
super(Events, self).__init__()
class Metrics(BaseLayer):
def __init__(self):
super(Metrics, self).__init__()
忽略文件中执行类型(C,R,W,E,F)不进行检查
对external.py中’W’类型不检查,在文件中设置: # pylint: disable=W
# pylint: disable=W
from pysdk.first_layer import BaseLayer
class Events(BaseLayer):
def __init__(self):
super(Events, self).__init__()
class Metrics(BaseLayer):
def __init__(self):
super(Metrics, self).__init__()
忽略文件中某个函数执行类型(C,R,W,E,F)不进行检查
对external.py中’W,R,E’类型不检查,在文件中类下函数或普通函数下设置: # pylint: disable=W,E,R
from pysdk.first_layer import BaseLayer
class Events(BaseLayer):
def __init__(self):
# pylint: disable=W,R,E
super(Events, self).__init__()
def __init__(self):
super(Events, self).__init__()
class Metrics(BaseLayer):
def __init__(self):
super(Metrics, self).__init__()
忽略文件中某个类执行类型(C,R,W,E,F)不进行检查
对external.py中’W,R,E’类型不检查,在文件中类下面设置: # pylint: disable=C,F,W,E,R
from pysdk.first_layer import BaseLayer
class Events(BaseLayer):
# pylint: disable=C,R,W,E,F
def __init__(self):
super(Events, self).__init__()
def __init__(self):
super(Events, self).__init__()
class Metrics(BaseLayer):
def __init__(self):
super(Metrics, self).__init__()
忽略no-member的提示
代码处修改 # pylint: disable=no-member
pylint --disable=no-member ...
在命令行中使用pylint: disable=W
- 不禁用指定类型
pylint + 目标项目或者文件
编写测试代码文件
执行pylint
执行结果
如果对代码进行规范整改,对整改后的代码再次扫描,则会看到无任何检测状态,评分为10份
或命令行中执行pylint pylint_test.py
- 禁用W类型
pylint --disable=W external.py
配置文件配置
在项目根目录下生成配置文件pylintrc.conf
pylint --generate-rcfile > pylintrc.conf
pylint --persistent=n --generate-rcfile > pylintrc.conf
- 携带配置文件,针对单个文件的扫描
pylint --rcfile=pylintrc.conf manage.py
- 对指定项进行disable
配置禁止warning,配置禁止检查指定项
pylint的几种状态:Error(错误) Warning(警告) Refactor(重构) Convention(规范)
--disable=W,E,R,C
--disable=E,R,C
--disable=E,R
对R0801项进行disable之后,再次扫描则会看到不会再输出不符合的结果
- pylint设置每行检测字符数
针对每行字符数的修改,默认100
注意:重命名pylint.conf为.pylintrc,即不需要每次执行都带上--rcfile参数。
对整个项目扫描
在项目根目录下右击选择pylint执行
使用pylint有如下几种提示级别Error(错误)、Warning(警告)、Refactor(重构)、Convention(规范)。
输出的结果包括:与规范冲突的位置(行列)、违反的规范编号以及具体的内容提示,会针对检测结果给出一个评分,总分10分。
从检查信息可以看到,上述代码缺少模块注释(Missing module docstring)以及函数注释(Missing function docstring),函数名不符合蛇形命名规范(全由小写字母和下划线组成,在两个单词之间用下滑线连接)等。
pylint的应用场景
pylint可以在许多项目中应用,特别是在大型项目和团队协作中。以下是pylint的一些应用场景:
1. 代码规范:对于遵循PEP 8规范的项目,pylint可以帮助我们检查代码的风格是否符合规范,并提供相应的修复建议。
2. 代码质量:pylint可以帮助我们检查代码中的一些常见问题,如未使用的变量、未使用的导入和重复的代码等,以提高代码的质量和可维护性。
3. 团队协作:在团队协作中,pylint可以帮助我们统一代码风格和质量标准,以提高代码的一致性和可读性。
4. 持续集成:在持续集成环境中,pylint可以作为一个检查步骤,帮助我们在代码提交前发现问题,以避免将错误的代码合并到主分支。
参考文档
- 官方文档:http://pylint.pycqa.org/en/latest/user_guide/output.html
- pylint:https://pylint.readthedocs.io/en/latest/user_guide/usage/run.html
- Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)_pycharm 检查代码规范_SteveRocket的博客-CSDN博客
- https://blog.csdn.net/zhouruifu2015/article/details/129877179
Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
更多精彩,关注我公号,一起学习、成长
标准库系列-推荐阅读:
推荐阅读: