作者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/cn.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