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

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

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

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

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

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

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

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

1.功能

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

2.準(zhǔn)備

開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(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ì)指南。

請(qǐng)選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
  2. MacOS 環(huán)境 打開(kāi) 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%可能的無(wú)效代碼

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

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

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

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

下面舉個(gè)例子,參考下述代碼:

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

4.處理誤報(bào)

當(dāng) Vulture 錯(cuò)誤地將代碼塊報(bào)告為未使用時(shí),有多種選擇來(lái)抑制誤報(bào)。如果修復(fù)誤報(bào)也可以使其他用戶受益,請(qǐng)?zhí)峤粏?wèn)題報(bào)告。

白名單

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

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

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

忽略文件

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

Flake8 noqa 注釋

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

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

忽略名稱(chēng)

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

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

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

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

    關(guān)注

    117

    文章

    3807

    瀏覽量

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

    關(guān)注

    0

    文章

    93

    瀏覽量

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

    關(guān)注

    30

    文章

    4858

    瀏覽量

    69550
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4813

    瀏覽量

    85316
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    isis 7 professional_元件查找代碼

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

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

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

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

    本文主要介紹了python程序調(diào)試設(shè)置條件斷點(diǎn)。實(shí)際開(kāi)發(fā),調(diào)試代碼通常要花費(fèi)比新編寫(xiě)代碼更多
    發(fā)表于 01-14 11:39 ?6491次閱讀
    <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ì)代碼說(shuō)明

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

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

    單步調(diào)試對(duì)程序開(kāi)發(fā)有非常多的好處, 能夠幫助我們開(kāi)發(fā)人員檢測(cè)代碼, 分析數(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 是一種腳本語(yǔ)言,相比 C/C++ 這樣的編譯語(yǔ)言,在效率和性能方面存在一些不足。但是,有很多時(shí)候,Python 的效率并沒(méi)有想象的那么夸張。本文對(duì)一些 Python
    的頭像 發(fā)表于 09-01 11:28 ?1786次閱讀

    Python證件照制作小程序代碼

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

    Python如何快速查找文件

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

    Python的默認(rèn)編碼

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

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

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

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

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

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

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

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

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

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

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