一、Pylint 介绍
Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的语法错误,是否遵守编码风格标准、潜在的问题等,Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,是否有导入但未使用的模块,如果运行两次 Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。
支持自定义配置:例如显示或隐藏特定的警告,并且可以通过编写插件来添加功能;
使用Pylint检查文件时,需要直接将模块或包名作为参数;
可以在命令行以脚本方式运行(pylint),也可作为模块(pylint.lint)导入,建议作为命令行工具使用
二、Pylint安装
pip3 install pylint
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pylint
github地址:https://github.com/PyCQA/pylint
查看是否安装成功:pylint --version
三、查看帮助信息
pylint -h
或
pylint --help
--generate-rcfile
生成一个配置文件示例;
可以使用重定向把这个配置文件保存下来用做以后使用;
也可以在前面加上其它选项,使这些选项的值被包含在这个产生的配置文件里;
如:“pylint --persistent=n --generate-rcfile > pylint.conf”,查看 pylint.conf,可以看到 persistent=no,而不再是其默认值 yes;
--rcfile=<file>
指定一个配置文件;
把使用的配置放在配置文件中,这样不仅规范了自己代码,也可以方便地和别人共享这些规范;
如:pylint --rcfile=pylint.conf s1.py
使用pylint.conf这个配置文件来对s1.py进行检查
-i <y_or_n>, --include-ids=<y_or_n>
在输出中包含 message 的 id, 然后通过“pylint --help-msg=<msg-id>”来查看这个错误的详细信息,这样可以具体地定位错误。
-r <y_or_n>, --reports=<y_or_n>
表示 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 --persistent=n --generate-rcfile > pylintrc
# 路径下会生成一个pylint.conf文件,都是pylint的默认配置,这个可以自行修改,为了跟团队项目统一
五、检查py文件
# 检查单个py文件,指定使用刚刚生成的默认配置文件,不指定,也是使用默认
pylint --rcfile=pylintrc s1.py
六、检查整个项目
### 注意:检查整个项目,一定要在项目路径下新建__init__.py,否则会报错
# 切换到上一层
cd ..
# 执行
pylint pylint_demo
# 修改过后再执行,下图是对比
七、生成报告
# 执行
pylint -ry pylint_demo
# 可以看到报告,
# Statistics by type
有三个模块(py文件);类,方法为0;函数为1个
# Raw metrics
代码总共12行,空行有5行,也就是总共8行有效代码
# Messages by category
有3个convention,0个warning,0个error
#### 说明######
1 Pylint结果的级别:error,warning,refactor,convention;
2 可以根据首字母确定相应的级别,例如,C表示convention(规范)、W表示warning(告警)、E表示error(错误);
3 级别之后的数字表示告警所在文件中的行号和列号;
4 参数 “-ry”开启报告,“-rn”关闭报告(只显示警告和错误),默认为关闭报告;
************* Module pylint_demo.s1
pylint_demo/s1.py:1:0: C0114: Missing module docstring (missing-module-docstring)
************* Module pylint_demo.s2
pylint_demo/s2.py:1:0: C0114: Missing module docstring (missing-module-docstring)
pylint_demo/s2.py:7:0: C0116: Missing function or method docstring (missing-function-docstring)
Report
======
8 statements analysed.
Statistics by type
------------------
+---------+-------+-----------+-----------+------------+---------+
|type |number |old number |difference |%documented |%badname |
+=========+=======+===========+===========+============+=========+
|module |3 |NC |NC |33.33 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
|class |0 |NC |NC |0 |0 |
+---------+-------+-----------+-----------+------------+---------+
|method |0 |NC |NC |0 |0 |
+---------+-------+-----------+-----------+------------+---------+
|function |1 |NC |NC |0.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
Raw metrics
-----------
+----------+-------+------+---------+-----------+
|type |number |% |previous |difference |
+==========+=======+======+=========+===========+
|code |12 |70.59 |NC |NC |
+----------+-------+------+---------+-----------+
|docstring |0 |0.00 |NC |NC |
+----------+-------+------+---------+-----------+
|comment |0 |0.00 |NC |NC |
+----------+-------+------+---------+-----------+
|empty |5 |29.41 |NC |NC |
+----------+-------+------+---------+-----------+
Duplication
-----------
+-------------------------+------+---------+-----------+
| |now |previous |difference |
+=========================+======+=========+===========+
|nb duplicated lines |0 |NC |NC |
+-------------------------+------+---------+-----------+
|percent duplicated lines |0.000 |NC |NC |
+-------------------------+------+---------+-----------+
Messages by category
--------------------
+-----------+-------+---------+-----------+
|type |number |previous |difference |
+===========+=======+=========+===========+
|convention |3 |NC |NC |
+-----------+-------+---------+-----------+
|refactor |0 |NC |NC |
+-----------+-------+---------+-----------+
|warning |0 |NC |NC |
+-----------+-------+---------+-----------+
|error |0 |NC |NC |
+-----------+-------+---------+-----------+
% errors / warnings by module
-----------------------------
+---------------+------+--------+---------+-----------+
|module |error |warning |refactor |convention |
+===============+======+========+=========+===========+
|pylint_demo.s2 |0.00 |0.00 |0.00 |66.67 |
+---------------+------+--------+---------+-----------+
|pylint_demo.s1 |0.00 |0.00 |0.00 |33.33 |
+---------------+------+--------+---------+-----------+
Messages
--------
+---------------------------+------------+
|message id |occurrences |
+===========================+============+
|missing-module-docstring |2 |
+---------------------------+------------+
|missing-function-docstring |1 |
+---------------------------+------------+
------------------------------------------------------------------
Your code has been rated at 6.25/10 (previous run: 6.67/10, -0.42)
八、Pycharm集成Pylint
#program: pylint可执行文件的路径
windows下是:python安装目录下scripts/pylint.exe
linux下是:python安装路径下的找pylint可执行文件
# arguments: 执行参数,最后必须以 $FilePath$ 结尾
比如:指定使用刚刚生成的配置文件
-rcfile=pylintrc $FilePath$
# working directory: 路径
就填下面
$FileDir$