代码review:python代码review工具pylint安装使用

 

1. 安装pylint

使用pip install pylint安装。

注意:安装完成之后确认pylint.exe在python安装目录下的Scripts目录下。

如果没有,将pylint.exe所在的文件目录添加到path下即可使用pylint命令。

2. 常用的命令行参数:

--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

3. 命令行使用pylint

生成配置文件:

pylint --generate-rcfile  > pylint.conf

pylint --persistent=n --generate-rcfile > pylint.conf

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

1. 进入这个模块所在的文件夹,运行

pylint [options] module.py

(e.g. pylint --rcfile=pylint.conf 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 中显示。

4. 在pycharm里配置pylint

安装后在pycharm里配置:File - Settings - External Tools 点击+号增加名为pylint的工具

 配置信息如下:

--output-format=parseable
--disable=R
-rn
--msg-template="{abspath}:{line}: [{msg_id}({symbol}), {obj}] {msg}"
$DirPath$

 $DirPath$ --要review的代码所在目录,目录中必须包含__init__.py文件

5. 代码自定义执行扫描

# 定义要review的项目,或者需要review的模块
review_projects = [r'D: est1', r'test2']
# 遍历执行review扫描,并将结果记录在制定的文件里
for project in review_projects: results = Run(['--output-format=parseable', '-rn', '--disable=C0103,C0301,C0330,C0326,C0304,C0412,C0411,W0703', '--msg-template="{abspath}:{line}: [{msg_id}({symbol}), {obj}] {msg}"', project], exit=False,) project_name = project.split("\")[-1] # 获取执行扫描的模块或包名 score = round(results.linter.stats["global_note"],2) # 获取扫描结果分数并保留2位小数
with open(r
'D:...pylint_scan.txt', 'a', encoding='utf-8') as fp: fp.write(f'{project_name} : {score} ') #结果记录在txt文本中 # print(i.split('\')[-1], ' ', results.linter.stats['global_note'])

 为了扫描的准确性,将所有含有py文件的目录下批量添加了__init__.py

"""
此处是为了将所有py文件所在目录增加__init__.py
已存在的不用添加。并将添加的位置打印出来。
"""
import os

global a


def search_file(path, text):
"""
遍历执行每个文件查找是否存在py文件,并将没有__init__.py的文件夹下增加此文件。
:param path: 查找的根目录
:param text: 以text结尾的文件
:return:
"""
try:
files = os.listdir(path)
for f in files:
f1 = os.path.join(path, f)
if os.path.isdir(f1):
# print(f1)
search_file(f1, text)
elif os.path.isfile(f1) and f1.endswith(text):
# os.path.splitext(f1)[1] == text and
# 找到py文件
parent_dir = f1.split(os.path.basename(f1))[0]
f2 = os.listdir(parent_dir)
if '__init__.py' in f2:
print("No need to add for file: " + f1)
continue
else:
with open(os.path.join(parent_dir, '__init__.py'), 'w', encoding='utf-8') as init_f:
init_f.write("")
print("add file" + str(os.path.join(parent_dir, '__init__.py')))
except Exception as ex:
print(u'文件查询失败' + str(ex))


search_file('.', '.py')
原文地址:https://www.cnblogs.com/bright-carol/p/13262066.html