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:\test1', 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}\n') #結果記錄在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')