Python之深入解析Vulture如何一键找出项目中所有无效的代码
一、前言
- Vulture 可以在Python程序中查找未使用的代码,这对于清理和查找大型项目(代码库)中的错误非常有用。
- 不过由于 Python 的动态特性,像 Vulture 这样的静态代码分析器很可能会遗漏一些无效代码,此外,可能会将仅被隐式调用的代码标记为未使用。
- 尽管如此,Vulture 对于提升代码质量来说可能是一个非常有用的工具:
- 速度快:静态代码分析;
- 靠谱:已测试;
- 兼容强:与 pyflies 相辅相成,具有相同的输出语法;
- 可排序:可以按大小对未使用的类和函数进行排序 --sort-by-size;
- 支持 Python>=3.6。
二、依赖安装
- Windows 环境 打开 Cmd (开始-运行-CMD);
- MacOS 环境 打开 Terminal (command+空格输入Terminal);
- 如果使用的是 VSCode 编辑器或 Pycharm,可以直接使用界面下方的 Terminal:
pip install vulture
三、Vulture 的用法
- 可以直接使用命令行工具运行 vulture:
vulture myscript.py # 或者
python3 -m vulture myscript.py # 或者
vulture myscript.py mypackage/ # 或者
vulture myscript.py --min-confidence 100 # 只报告100%可能的无效代码
- 如果 vulture 没有被加进环境变量(如 Windows 系统下不会自动加到环境变量中),建议使用 python -m 的方式调用 vulture。
- 可见,命令的参数可以是 Python 文件或目录。对于每个目录,Vulture 会分析所有包含的 *.py文件。
- Vulture 为每个无效代码块分配一个置信度值,100% 的置信度值意味着百分百的无效代码。
- 找到并删除无效代码后,再次运行 Vulture,因为它可能会发现更多的无效代码。
- 举个例子,参考下述代码:
import osclass Greeter:def greet(self):print("Hi")def hello_world():message = "Hello, world!"greeter = Greeter()greet_func = getattr(greeter, "greet")greet_func()if __name__ == "__main__":hello_world()
- 调用 vulture:
vulture dead_code.py
# 或者
python -m vulture dead_code.py
- 输出效果如下:
dead_code.py:1: unused import 'os' (90% confidence)
dead_code.py:4: unused function 'greet' (60% confidence)
dead_code.py:8: unused variable 'message' (60% confidence)
- Vulture 正确地将“os”和“message”报告为未使用,但未能检测到实际使用了“greet”。处理此类误报的推荐方法是创建一个白名单 Python 文件。
四、处理误报
- 当 Vulture 错误地将代码块报告为未使用时,有多种选择来抑制误报。
- 如果修复误报也可以使其它用户受益,请提交问题报告。
① 白名单
- 推荐的选项是将报告为“未使用的”已使用代码添加到 Python 模块,并将其添加到扫描路径列表中。要自动获取这样的白名单,请传递 --make-whitelist 给 Vulture:
vulture mydir --make-whitelist > whitelist.py
vulture mydir whitelist.py
- 请注意,生成的 whitelist.py 文件将包含有效的 Python 语法,但为了让 Python 能够运行它,通常需要进行一些修改。
② 忽略文件
- 如果要忽略整个文件或目录,请使用 --exclude 参数如 --exclude *settings.py,docs/ 。
③ Flake8 noqa 注释
- 为了与 flake8 兼容,Vulture 支持 F401 和 F841错误代码以忽略未使用的导入 ( # noqa: F401 ) 和未使用的局部变量 ( # noqa: F841 )。
- 但是,建议使用白名单而不是 noqa 注释,因为 noqa 注释会给代码增加视觉干扰并使其更难阅读。
④ 忽略名称
- 还可以使用 --ignore-names foo*,ba[rz] 让 Vulture 忽略所有以 foo 开头的及 bar 和 baz 的名称。
- 此外,–ignore-decorators 选项可用于忽略用给定装饰器装饰的函数。这在 Flask 项目中很有帮助,可以在其中使用装饰器 --ignore-decorators “@app.route” 忽略所有 @app.route 函数。
- 建议使用白名单代替 --ignore-names 或 --ignore-decorators ,因为白名单在传递给 Vulture 时会自动检查语法正确性。
Python之深入解析Vulture如何一键找出项目中所有无效的代码相关推荐
- python判断几个数最大最小_python 找出list中最大或者最小几个数的索引方法
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...
- python将大于输出列表_python找出列表中大于某个阈值的数据段示例
该算法实现对列表中大于某个阈值(比如level=5)的连续数据段的提取,具体效果如下: 找出list里面大于5的连续数据段: list = [1,2,3,4,2,3,4,5,6,7,4,6,7,8,5 ...
- Python找出列表中出现次数最多的元素三种方式
通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...
- python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...
本文实例讲述了Python找出序列中出现次数最多的元素.分享给大家供大家参考,具体如下: 问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是 ...
- python 列表求最大值_Python找出列表中的最大数和最小数
Python找出列表中数字的最大值和最小值 思路: 先使用冒泡排序将列表中的数字从小到大依次排序 取出数组首元素和尾元素 运行结果: 源代码: 1 ''' 2 4.编写函数,功能:找出多个数中的最大值 ...
- Python数据分析 找出数组中每行(或每列)中指定的百分位数 numpy.percentile()
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析 找出数组中每行(或每列) 中指定的百分位数 numpy.percent ...
- python找出矩阵中的最大值_Python例题:找到并输出矩阵中的最大值
早就听说Python是一门很强大的语言,不过一直没有什么机会去学.直到前一段时间我的技术群里有人问我了一道Python的题目,本着帮助他人.充实自己的想法,我二话不说就去查找资料,做出了这道题.也算是 ...
- 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python
文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...
最新文章
- 用adb命令启动停止Android程序
- struts2 的错误信息: java.net.UnknownHostException: struts.apache.org
- resources.arsc格式(包-类型-资源项)
- 对比一段ADC键值读取的代码
- python实现目标识别_Python10行代码实现目标检测
- 我的常用软件大公开!
- 【Nginx】第一章 快速入门
- log4j记录日志到sqlserver数据库
- Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)...
- java使用IO打印流输出到文件
- 当mqtt客户端向服务端发送信息出现掉包的问题
- 蒜厂年会|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
- Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)
- 在操作系统、芯片领域跌倒的中国程序员,如何崛起?
- 输入一个字符,判断输入的是控制字符、数字、大小写字母还是其他字符,并给出相应提示
- 一文了解 Julia(lang)
- Eclipse安装STS
- GAN论文详细解读+思想
- P9-Windows与网络基础-Windows基本命令-文本操作(type、findstr)
- 如何在所有用户的桌面创建快捷方式