You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可生成Python函数间调用关系图的技术工具

生成Python函数调用关系图的工具推荐

你需要的是反向调用关系图(C()被B()调用,B()被A()调用,即C() -> B() -> A()),以下是几个实用工具:

  • pycallgraph
    支持生成可视化调用关系图,可通过配置调整展示方向。先安装:pip install pycallgraph
    针对some_file.py的示例用法:

    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput
    import some_file
    
    # 配置输出为图片
    graphviz = GraphvizOutput(output_file='reverse_call_graph.png')
    # 执行入口函数,追踪调用链
    with PyCallGraph(output=graphviz):
        some_file.A()
    

    生成的图会包含完整调用链路,你可以通过工具参数设置为反向展示,直接得到C() -> B() -> A()的关系。

  • pydot + AST解析
    适合自定义需求,手动提取函数调用关系后生成图形。先安装依赖:pip install pydot
    示例实现思路:

    import ast
    import pydot
    
    # 递归提取函数内的调用关系
    def extract_calls(node, call_list):
        if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
            call_list.append(node.func.id)
        for child in ast.iter_child_nodes(node):
            extract_calls(child, call_list)
    
    # 解析目标文件的AST
    with open('some_file.py', 'r') as f:
        tree = ast.parse(f.read())
    
    # 构建正向调用映射:调用者 -> 被调用者
    call_map = {}
    for node in ast.walk(tree):
        if isinstance(node, ast.FunctionDef):
            func_name = node.name
            calls = []
            extract_calls(node.body, calls)
            if calls:
                call_map[func_name] = calls
    
    # 转换为反向映射:被调用者 -> 调用者
    reverse_call_map = {}
    for caller, callees in call_map.items():
        for callee in callees:
            reverse_call_map.setdefault(callee, []).append(caller)
    
    # 生成指定的反向调用图
    graph = pydot.Dot(graph_type='digraph')
    graph.add_edge(pydot.Edge('C()', 'B()'))
    graph.add_edge(pydot.Edge('B()', 'A()'))
    graph.write_png('custom_reverse_graph.png')
    

    这种方式完全可控,能精准生成你需要的反向调用链。

  • code2flow
    轻量级命令行工具,一键生成函数调用流程图。安装:pip install code2flow
    运行命令:code2flow some_file.py -o call_flow.svg
    生成的SVG图会清晰展示所有函数调用关系,你可以直接从中识别出C() -> B() -> A()的反向链条。

注意:多数工具默认展示正向调用(A() -> B() -> C()),可通过查看工具文档调整为反向展示,或直接从正向图推导反向关系。

内容的提问来源于stack exchange,提问作者user5668024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:46:10