作者moodoa3583 (氣氛的燃料)
看板Python
標題[問題] 如何知道一個 function 牽扯到多少 modul
時間Tue Sep 7 08:34:54 2021
大家早
最近在拆工作上的一個 package ,當初前人做這個 package 的時候為了能應用在多種情況所以主 module 裡面有很多 function ,也因此也寫了很多輔助的 module 互相 import
不過這麼做的結果就是讓整個程式太肥,現在要做的東西只需要主 module 裡面的其中一個 function ,因此想特別拉出來做成一個新的輕量化程式
在循線找關聯 module / function 這邊花了滿多時間,即使不直接影響主 module 的 module 或 function 也可能會有間接關係,這讓我好奇有沒有某種插件 (我是用 vscode) 可以在執行 package 的某個 function 時自動追蹤牽扯到的 module 和 function ,並且把沒用到的部分註解掉 (這部分可有可無)
以上,如果還有說明不齊的地方再麻煩和我說了,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.147.126 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1630974896.A.896.html
1F:推 supremebboy: 就是列出目前的 call stack 吧? 09/07 09:56
嗯沒錯,類似執行
test.py
def foo():
print("foo")
==================
test2.py
from test import foo
def fum():
print("fum")
def bar():
print("bar")
fum()
foo()
def go():
bar()
go()
的時候,插件最終會回傳 (test2.py) go→ (test2.py) bar → (test2.py)fum → (test.
※ 編輯: moodoa3583 (223.140.147.126 臺灣), 09/07/2021 10:17:59
2F:→ moodoa3583: 噢結果貼上來縮排都跑掉了,除了最後的 go() 之外,de09/07 10:20
3F:→ moodoa3583: f 以下到下一個 def 之前都是縮排 09/07 10:20
※ 編輯: moodoa3583 (223.140.147.126 臺灣), 09/07/2021 10:46:09
4F:推 poototo: profile, print_caller? 09/07 12:36
5F:推 s0914714: traceback.print_stack()? 09/07 13:21
8F:→ moodoa3583: 感謝各位的回應,試了 print caller (上圖) 和 trackb 09/07 17:35
9F:→ moodoa3583: ack.print_stack() (下圖) 兩種用法,以結果來說 trac 09/07 17:35
10F:→ moodoa3583: kback 比較接近,但這樣必須把 trackback 埋在最源頭 09/07 17:35
11F:→ moodoa3583: 的 function 而不是最末端的執行 function (而我是想 09/07 17:35
12F:→ moodoa3583: 透過最末端的執行 function 溯源找到所有有牽扯到的 f 09/07 17:35
13F:→ moodoa3583: unction),以使用上來說有點本末倒置 09/07 17:35
14F:推 single4565: vsc點function右鍵查看參考? 09/07 20:33
的確是個方法,但現在這個 package 太錯綜複雜,開參考人工一個一個 function 往上追有點耗時,所以才想說有沒有自動的方法
※ 編輯: moodoa3583 (223.140.147.126 臺灣), 09/07/2021 21:43:10
15F:→ gmccntzx1: 你有試過 call graph 嗎? 可以找找看 pycallgraph2 看 09/07 22:02
16F:→ gmccntzx1: 怎麼使用。 09/07 22:02
18F:→ lycantrope: python -m trace -t test2.py 之類?沒仔細研究 09/07 22:15
http://i.imgur.com/DdQWs00.jpg
沒錯!這是我要的,雖然實際拿去追 package 有點小 error 但應該只是程式本身的小問題。感謝你
※ 編輯: moodoa3583 (223.140.147.126 臺灣), 09/08/2021 13:16:02