RM新时代网站-首页

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

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

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

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

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

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

不過由于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)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。

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

  1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環(huán)境 打開 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 沒有被加進(jìn)環(huán)境變量(如Windows系統(tǒng)下不會自動加到環(huán)境變量中),建議使用 python -m 的方式調(diào)用 vulture。

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

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

找到并刪除無效代碼后,再次運行 Vulture,因為它可能會發(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”報告為未使用,但未能檢測到實際使用了“greet”。處理此類誤報的推薦方法是創(chuàng)建一個白名單 Python 文件。見下面第四點。

4.處理誤報

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

白名單

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

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

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

忽略文件

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

Flake8 noqa 注釋

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

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

忽略名稱

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

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

我們建議使用白名單代替 ** --ignore-names ** 或 ** --ignore-decorators ** ,因為白名單在傳遞給 Vulture 時會自動檢查語法正確性。

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

    關(guān)注

    117

    文章

    3785

    瀏覽量

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

    關(guān)注

    0

    文章

    92

    瀏覽量

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

    關(guān)注

    30

    文章

    4775

    瀏覽量

    68506
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84617
收藏 人收藏

    評論

    相關(guān)推薦

    isis 7 professional_元件查找代碼

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

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

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

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

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

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

    本文檔的主要內(nèi)容詳細(xì)介紹的是python代碼示例之基于Python的日歷api調(diào)用代碼實例。
    發(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>實例

    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 代碼加速運行的的小技巧

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

    Python證件照制作小程序代碼

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

    Python如何快速查找文件

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

    Python的默認(rèn)編碼

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

    python怎樣運行代碼

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

    python寫完程序之后怎么運行

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

    python如何換行而不運行代碼

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

    運行Python程序的幾種常見方法

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

    python軟件怎么運行代碼

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