0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-21 10:28 ? 次閱讀

Vulture 可以在Python程序中查找未使用的代碼。這對于清理和查找大型項(xiàng)目(代碼庫)中的錯誤非常有用。

不過由于Python的動態(tài)特性,像 Vulture 這樣的靜態(tài)代碼分析器很可能會遺漏一些無效代碼,此外,可能會將僅被隱式調(diào)用的代碼標(biāo)記為未使用。

盡管如此,Vulture對于提升代碼質(zhì)量來說可能是一個非常有用的工具。

1.功能

  • 速度快: 靜態(tài)代碼分析
  • 靠譜: 已測試
  • 兼容強(qiáng): 與pyflies相輔相成,具有相同的輸出語法
  • 可排序: 可以按大小對未使用的類和函數(shù)進(jìn)行排序 --sort-by-size
  • 支持Python>=3.6

2.準(zhǔn)備

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開 Cmd (開始-運(yùn)行-CMD)。
  2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install vulture

3.用法

你可以直接使用命令行工具運(yùn)行 vulture:

vulture myscript.py # 或者
python3 -m vulture myscript.py # 或者
vulture myscript.py mypackage/ # 或者
vulture myscript.py --min-confidence 100 # 只報(bào)告100%可能的無效代碼

如果 vulture 沒有被加進(jìn)環(huán)境變量(如Windows系統(tǒng)下不會自動加到環(huán)境變量中),建議使用 python -m 的方式調(diào)用 vulture。

可見,命令的參數(shù)可以是 Python 文件或目錄。對于每個目錄,Vulture 會分析所有包含的 *.py文件。

Vulture 為每個無效代碼塊分配一個置信度值。100% 的置信度值意味著百分百的無效代碼。

找到并刪除無效代碼后,再次運(yùn)行 Vulture,因?yàn)樗赡軙l(fā)現(xiàn)更多的無效代碼。

下面舉個例子,參考下述代碼:

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

調(diào)用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”報(bào)告為未使用,但未能檢測到實(shí)際使用了“greet”。處理此類誤報(bào)的推薦方法是創(chuàng)建一個白名單 Python 文件。見下面第四點(diǎn)。

4.處理誤報(bào)

當(dāng) Vulture 錯誤地將代碼塊報(bào)告為未使用時,有多種選擇來抑制誤報(bào)。如果修復(fù)誤報(bào)也可以使其他用戶受益,請?zhí)峤粏栴}報(bào)告。

白名單

推薦的選項(xiàng)是將報(bào)告為"未使用的"已使用代碼添加到 Python 模塊,并將其添加到掃描路徑列表中。要自動獲取這樣的白名單,請傳遞 ** --make-whitelist ** 給 Vulture:

vulture mydir --make-whitelist > whitelist.py
vulture mydir whitelist.py

請注意,生成的 ** whitelist.py ** 文件將包含有效的 Python 語法,但為了讓 Python 能夠運(yùn)行它,通常需要進(jìn)行一些修改。

忽略文件

如果要忽略整個文件或目錄,請使用** --exclude ** 參數(shù)如 ** --exclude *settings.py,docs/ ** 。

Flake8 noqa 注釋

為了與flake8兼容,Vulture 支持 F401 和 F841錯誤代碼以忽略未使用的導(dǎo)入 ( **# noqa: F401 ** ) 和未使用的局部變量 ( **# noqa: F841 ** )。

但是,我們建議使用白名單而不是** noqa注釋,因?yàn)?/strong>noqa **注釋會給代碼增加視覺干擾并使其更難閱讀。

忽略名稱

你還可以使用 ** --ignore-names foo*,ba[rz] ** 讓 Vulture 忽略所有以 ** foo** 開頭的及 ** bar ** 和 ** baz ** 的名稱。

此外,--ignore-decorators 選項(xiàng)可用于忽略用給定裝飾器裝飾的函數(shù)。這在 Flask 項(xiàng)目中很有幫助,可以在其中使用裝飾器** --ignore-decorators "@app.route" ** 忽略所有 ** @app.route ** 函數(shù)。

我們建議使用白名單代替 ** --ignore-names ** 或 ** --ignore-decorators ** ,因?yàn)榘酌麊卧趥鬟f給 Vulture 時會自動檢查語法正確性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3756

    瀏覽量

    80751
  • 分析器
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    12478
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68231
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
收藏 人收藏

    評論

    相關(guān)推薦

    isis 7 professional_元件查找代碼

    isis 7 professional元件查找代碼有各總isis 7 professional元件的查找代碼
    發(fā)表于 12-08 15:58 ?7次下載

    Python對字符串進(jìn)行搜索和查找詳細(xì)介紹

    個系列的第一篇文章,我們將重點(diǎn)討論如何使用Python的正則表達(dá)式并突出Python中一些獨(dú)有的特性。 我們將介紹Python
    發(fā)表于 11-15 11:20 ?8044次閱讀

    python程序調(diào)試設(shè)置條件斷點(diǎn)

    本文主要介紹了python程序調(diào)試設(shè)置條件斷點(diǎn)。實(shí)際開發(fā),調(diào)試代碼通常要花費(fèi)比新編寫代碼更多
    發(fā)表于 01-14 11:39 ?6249次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>程序</b>調(diào)試<b class='flag-5'>中</b>設(shè)置條件斷點(diǎn)

    python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例。
    發(fā)表于 09-06 14:25 ?42次下載
    <b class='flag-5'>python</b><b class='flag-5'>代碼</b>示例之基于<b class='flag-5'>Python</b>的日歷api調(diào)用<b class='flag-5'>代碼</b>實(shí)例

    python基礎(chǔ)教程之Python核心編程學(xué)習(xí)詳細(xì)代碼說明

    bwpython基礎(chǔ)教程之Python核心編程學(xué)習(xí)詳細(xì)代碼說明這一章蠻重要,代碼都敲進(jìn)去試過,請批評指正。方便起見,程序寫在py文件。
    發(fā)表于 10-24 14:45 ?28次下載

    如何使用Eclipse調(diào)試Python

    單步調(diào)試對程序開發(fā)有非常多的好處, 能夠幫助我們開發(fā)人員檢測代碼, 分析數(shù)據(jù), 查找原因。下面介紹一下在Eclipse IDE調(diào)試Python
    發(fā)表于 06-17 17:48 ?16次下載
    如何使用Eclipse調(diào)試<b class='flag-5'>Python</b>

    Python 代碼加速運(yùn)行的的小技巧

    Python 是一種腳本語言,相比 C/C++ 這樣的編譯語言,在效率和性能方面存在一些不足。但是,有很多時候,Python 的效率并沒有想象的那么夸張。本文對一些 Python
    的頭像 發(fā)表于 09-01 11:28 ?1677次閱讀

    Python證件照制作小程序代碼

    Python證件照制作小程序代碼,可一鍵修改證件照背景及大小,采用removebg在線摳圖工具進(jìn)行自動摳圖,程序已提供默認(rèn)apiKey(
    的頭像 發(fā)表于 02-24 10:23 ?3336次閱讀
    <b class='flag-5'>Python</b>證件照制作小<b class='flag-5'>程序</b>源<b class='flag-5'>代碼</b>

    Python如何快速查找文件

    但是既然用到了Python,就想到可不可以來自己實(shí)現(xiàn)一下,下面的分析是針對一個目錄來查找的,當(dāng)你知道文件大致有什么東西的時候,比如你要查找 md 結(jié)尾的的文件,又大致知道在哪個目錄的時候,就可以來自己
    的頭像 發(fā)表于 03-03 15:39 ?1390次閱讀

    Python的默認(rèn)編碼

    我們使用Pycharm來編寫Python程序時會指定工程編碼和文件編碼為UTF-8,那么Python代碼被保存到磁盤時就會被轉(zhuǎn)換為UTF-8編碼對應(yīng)的字節(jié)(encode過程)后寫入磁盤
    的頭像 發(fā)表于 07-05 16:11 ?1088次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>中</b>的默認(rèn)編碼

    python怎樣運(yùn)行代碼

    Python是一種廣泛使用的編程語言,用于開發(fā)各種類型的應(yīng)用程序。它具有簡單易學(xué)的語法和強(qiáng)大的功能,可以用于編寫簡單的腳本、開發(fā)桌面應(yīng)用、構(gòu)建Web應(yīng)用、進(jìn)行科學(xué)計(jì)算等多種用途。在本文中,我們將詳細(xì)
    的頭像 發(fā)表于 11-22 10:31 ?1120次閱讀

    python寫完程序之后怎么運(yùn)行

    Python是一門簡潔、易學(xué)的編程語言,被廣泛應(yīng)用于數(shù)據(jù)分析、人工智能等領(lǐng)域。在學(xué)習(xí)Python編程的過程,了解程序的運(yùn)行機(jī)制是至關(guān)重要的。本文將詳盡解析
    的頭像 發(fā)表于 11-22 11:10 ?947次閱讀

    python如何換行而不運(yùn)行代碼

    Python程序的換行是指在代碼中使用特定的語法來表示換行,以使代碼更易讀。換行的目的是為了讓程序
    的頭像 發(fā)表于 11-24 09:50 ?3042次閱讀

    運(yùn)行Python程序的幾種常見方法

    方法: 使用Python解釋器 Python解釋器是運(yùn)行Python程序的基本工具。在命令行輸入 py
    的頭像 發(fā)表于 11-28 15:32 ?2320次閱讀

    python軟件怎么運(yùn)行代碼

    Python是一種高級編程語言,它被廣泛用于開發(fā)各種類型的應(yīng)用程序,從簡單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運(yùn)行Python代碼,您需要一個P
    的頭像 發(fā)表于 11-28 16:02 ?842次閱讀