使用開(kāi)源可視化工具來(lái)理解你的Python代碼
VizTracer 工具可以可視化并跟蹤 Python 代碼,讓你可以更深入地了解其工作原理。
隨著 Python 項(xiàng)目變得越來(lái)越大、越復(fù)雜,理解起它來(lái)就變得充滿挑戰(zhàn)性。即使是你自己獨(dú)自編寫(xiě)了整個(gè)項(xiàng)目,也不可能完全知道項(xiàng)目是如何工作的。為了能更好的理解你的代碼,調(diào)試和分析代碼變得至關(guān)重要。
VizTracer 是一個(gè)這樣的工具,它通過(guò)跟蹤和可視化 Python 代碼的執(zhí)行過(guò)程,來(lái)幫助你對(duì)代碼的理解。無(wú)需對(duì)源代碼進(jìn)行任何更改,VizTracer 即可記錄函數(shù)的入口 / 出口,函數(shù)參數(shù) / 返回值以及任意變量,然后通過(guò) Trace-Viewer 使用直觀的谷歌前端界面來(lái)顯示數(shù)據(jù)。
下面是一個(gè)運(yùn)行蒙特卡洛樹(shù)搜索的例子:
Monte Carlo tree search visualization
每個(gè)函數(shù)都在時(shí)間線上以堆棧的形式記錄和可視化,這樣你就可以看到在運(yùn)行程序時(shí)發(fā)生了什么。你可以放大查看任意特定點(diǎn)的詳細(xì)信息:
Zooming in on VizTracer visualization
VizTracer 還可以自動(dòng)記錄函數(shù)參數(shù)和返回值。你可以單擊函數(shù)條目并查看詳細(xì)信息:
Viewing VizTracer details
或者你可以創(chuàng)建一個(gè)全新的信號(hào),并用它來(lái)記錄變量。例如,這顯示了執(zhí)行梯度下降時(shí)的成本值:
VizTracer gradient descent
與其他設(shè)置復(fù)雜的工具相比,VizTracer 使用起來(lái)非常簡(jiǎn)單,并且沒(méi)有任何依賴(lài)關(guān)系。你可以從 pip 安裝它:
pip install viztracer
你也可以通過(guò)輸入來(lái)跟蹤你的程序(<your_script.py>
是你腳本的名稱(chēng)):
viztracer <your_script.py>
VizTracer 將在你的工作目錄中生成一個(gè) HTML 報(bào)告,你可以在 Chrome 瀏覽器中打開(kāi)它。
VizTracer 還提供了其他高級(jí)功能,比如過(guò)濾器功能,你可以使用它過(guò)濾掉不想跟蹤的函數(shù),獲得更清晰的報(bào)告。例如,要僅包含文件中的函數(shù),你需要:
viztracer include_files ./ --run <your_script.py>
記錄函數(shù)參數(shù)和返回值:
viztracer --log_function_args --log_return_value <your_script.py>
記錄與某個(gè)正則表達(dá)式匹配的任意變量:
# log variables starts with a
viztracer --log_var a.* --run <your_script.py>
你可以通過(guò)對(duì)源代碼進(jìn)行較小的修改來(lái)獲得其他功能,例如自定義事件來(lái)記錄數(shù)值和對(duì)象。
VizTracer 還包括一個(gè)虛擬調(diào)試器(vdb),它可以調(diào)試 VizTracer 的日志文件。可以用 vdb 調(diào)試你運(yùn)行中的代碼(與 pdb 非常相似)以便你了解代碼流。有用的是,它還支持時(shí)間回溯,因?yàn)樗腊l(fā)生的一切。
與一些原型不同,VizTracer 使用純 C 語(yǔ)言實(shí)現(xiàn)其核心,這將極大地減少開(kāi)銷(xiāo),使其達(dá)到類(lèi)似于 cProfile 的水平。
VizTracer 是開(kāi)源的,在 Apache 2.0 許可下發(fā)布,支持所有常見(jiàn)的操作系統(tǒng)平臺(tái)(Linux、macOS 和 Windows)。你可以在 GitHub 上了解關(guān)于它的更多特性并訪問(wèn)源代碼。