0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vulture 可在Python程序中查找未使用的代码

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 10:28 次阅读

Vulture 可以在Python程序中查找未使用的代码。这对于清理和查找大型项目(代码库)中的错误非常有用。

不过由于Python的动态特性,像 Vulture 这样的静态代码分析器很可能会遗漏一些无效代码,此外,可能会将仅被隐式调用的代码标记为未使用。

尽管如此,Vulture对于提升代码质量来说可能是一个非常有用的工具。

1.功能

  • 速度快: 静态代码分析
  • 靠谱: 已测试
  • 兼容强: 与pyflies相辅相成,具有相同的输出语法
  • 可排序: 可以按大小对未使用的类和函数进行排序 --sort-by-size
  • 支持Python>=3.6

2.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install vulture

3.用法

你可以直接使用命令行工具运行 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 os

class 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 文件。见下面第四点。

4.处理误报

当 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 时会自动检查语法正确性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    116

    文章

    3777

    浏览量

    80853
  • 分析器
    +关注

    关注

    0

    文章

    92

    浏览量

    12488
  • 代码
    +关注

    关注

    30

    文章

    4750

    浏览量

    68357
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84456
收藏 人收藏

    评论

    相关推荐

    isis 7 professional_元件查找代码

    isis 7 professional元件查找代码有各总isis 7 professional元件的查找代码
    发表于 12-08 15:58 7次下载

    Python对字符串进行搜索和查找详细介绍

    个系列的第一篇文章,我们将重点讨论如何使用Python的正则表达式并突出Python中一些独有的特性。 我们将介绍Python
    发表于 11-15 11:20 8049次阅读

    python程序调试设置条件断点

    本文主要介绍了python程序调试设置条件断点。实际开发,调试代码通常要花费比新编写代码更多
    发表于 01-14 11:39 6259次阅读
    <b class='flag-5'>python</b><b class='flag-5'>程序</b>调试<b class='flag-5'>中</b>设置条件断点

    python代码示例之基于Python的日历api调用代码实例

    本文档的主要内容详细介绍的是python代码示例之基于Python的日历api调用代码实例。
    发表于 09-06 14:25 42次下载
    <b class='flag-5'>python</b><b class='flag-5'>代码</b>示例之基于<b class='flag-5'>Python</b>的日历api调用<b class='flag-5'>代码</b>实例

    python基础教程之Python核心编程学习详细代码说明

    bwpython基础教程之Python核心编程学习详细代码说明这一章蛮重要,代码都敲进去试过,请批评指正。方便起见,程序写在py文件
    发表于 10-24 14:45 28次下载

    如何使用Eclipse调试Python

    单步调试对程序开发有非常多的好处, 能够帮助我们开发人员检测代码, 分析数据, 查找原因。下面介绍一下在Eclipse IDE调试Python
    发表于 06-17 17:48 16次下载
    如何使用Eclipse调试<b class='flag-5'>Python</b>

    Python 代码加速运行的的小技巧

    Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并没有想象的那么夸张。本文对一些 Python
    的头像 发表于 09-01 11:28 1689次阅读

    Python证件照制作小程序代码

    Python证件照制作小程序代码,可一键修改证件照背景及大小,采用removebg在线抠图工具进行自动抠图,程序已提供默认apiKey(
    的头像 发表于 02-24 10:23 3403次阅读
    <b class='flag-5'>Python</b>证件照制作小<b class='flag-5'>程序</b>源<b class='flag-5'>代码</b>

    Python如何快速查找文件

    但是既然用到了Python,就想到可不可以来自己实现一下,下面的分析是针对一个目录来查找的,当你知道文件大致有什么东西的时候,比如你要查找 md 结尾的的文件,又大致知道在哪个目录的时候,就可以来自己
    的头像 发表于 03-03 15:39 1403次阅读

    Python的默认编码

    我们使用Pycharm来编写Python程序时会指定工程编码和文件编码为UTF-8,那么Python代码被保存到磁盘时就会被转换为UTF-8编码对应的字节(encode过程)后写入磁盘
    的头像 发表于 07-05 16:11 1100次阅读
    <b class='flag-5'>Python</b><b class='flag-5'>中</b>的默认编码

    python怎样运行代码

    Python是一种广泛使用的编程语言,用于开发各种类型的应用程序。它具有简单易学的语法和强大的功能,可以用于编写简单的脚本、开发桌面应用、构建Web应用、进行科学计算等多种用途。在本文中,我们将详细
    的头像 发表于 11-22 10:31 1175次阅读

    python写完程序之后怎么运行

    Python是一门简洁、易学的编程语言,被广泛应用于数据分析、人工智能等领域。在学习Python编程的过程,了解程序的运行机制是至关重要的。本文将详尽解析
    的头像 发表于 11-22 11:10 969次阅读

    python如何换行而不运行代码

    Python程序的换行是指在代码中使用特定的语法来表示换行,以使代码更易读。换行的目的是为了让程序
    的头像 发表于 11-24 09:50 3091次阅读

    运行Python程序的几种常见方法

    方法: 使用Python解释器 Python解释器是运行Python程序的基本工具。在命令行输入 py
    的头像 发表于 11-28 15:32 2443次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个P
    的头像 发表于 11-28 16:02 862次阅读