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ì)指南。
請選擇以下任一種方式輸入命令安裝依賴 :
- 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 沒有被加進(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 時會自動檢查語法正確性。
-
程序
+關(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
發(fā)布評論請先 登錄
相關(guān)推薦
評論