Vulture 可以在Python程序中查找未使用的代碼。這對于清理和查找大型項目(代碼庫)中的錯誤非常有用。
不過由于Python的動態(tài)特性,像 Vulture 這樣的靜態(tài)代碼分析器很可能會遺漏一些無效代碼,此外,可能會將僅被隱式調(diào)用的代碼標記為未使用。
盡管如此,Vulture對于提升代碼質(zhì)量來說可能是一個非常有用的工具。
1.功能
- 速度快: 靜態(tài)代碼分析
 - 靠譜: 已測試
 - 兼容強: 與pyflies相輔相成,具有相同的輸出語法
 - 可排序: 可以按大小對未使用的類和函數(shù)進行排序 
--sort-by-size - 支持Python>=3.6
 
2.準備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。
請選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
 - MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
 - 如果你用的是 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 沒有被加進環(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.處理誤報
當 Vulture 錯誤地將代碼塊報告為未使用時,有多種選擇來抑制誤報。如果修復誤報也可以使其他用戶受益,請?zhí)峤粏栴}報告。
白名單
推薦的選項是將報告為"未使用的"已使用代碼添加到 Python 模塊,并將其添加到掃描路徑列表中。要自動獲取這樣的白名單,請傳遞 ** --make-whitelist ** 給 Vulture:
vulture mydir --make-whitelist > whitelist.py
vulture mydir whitelist.py
請注意,生成的 ** whitelist.py ** 文件將包含有效的 Python 語法,但為了讓 Python 能夠運行它,通常需要進行一些修改。
忽略文件
如果要忽略整個文件或目錄,請使用** --exclude ** 參數(shù)如 ** --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 選項可用于忽略用給定裝飾器裝飾的函數(shù)。這在 Flask 項目中很有幫助,可以在其中使用裝飾器** --ignore-decorators "@app.route" ** 忽略所有 ** @app.route ** 函數(shù)。
我們建議使用白名單代替 ** --ignore-names ** 或 ** --ignore-decorators ** ,因為白名單在傳遞給 Vulture 時會自動檢查語法正確性。
- 
                                程序
                                +關(guān)注
關(guān)注
117文章
3833瀏覽量
84605 - 
                                分析器
                                +關(guān)注
關(guān)注
0文章
93瀏覽量
12872 - 
                                代碼
                                +關(guān)注
關(guān)注
30文章
4930瀏覽量
72802 - 
                                python
                                +關(guān)注
關(guān)注
56文章
4850瀏覽量
89309 
發(fā)布評論請先 登錄
isis 7 professional_元件查找代碼
Python中對字符串進行搜索和查找詳細介紹
python程序調(diào)試中設置條件斷點
    
python代碼示例之基于Python的日歷api調(diào)用代碼實例
    
python基礎(chǔ)教程之Python核心編程學習詳細代碼說明
如何使用Eclipse調(diào)試Python
    
Python 代碼加速運行的的小技巧
Python如何快速查找文件
Python中的默認編碼
    
          
        
        
Vulture 可在Python程序中查找未使用的代碼
                
 
    
           
            
            
                
            
評論