精华内容
下载资源
问答
  • 由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出...主要分下面三个模块了解一下python中如何生成函数关系调用图: 1、graphviz(Graph Visualization Software-图形可视化软件) 2...

     

     

    由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具。(内网没装好graphviz,还没真正用上)

    主要分下面三个模块了解一下python中如何生成函数关系调用图:

    1、graphviz(Graph Visualization Software-图形可视化软件)

    2、pycallgraph(创建python的可视化图形)

    3、objgraph(查看python对象图)


    1、graphviz

     graphviz 是一个图形可视化软件,可使用dot文件生成关系图。

    1.1、下载安装

    官网下载安装包进行安装,有Linux和Windows版本。

    或者直接用命令安装: sudo apt-get install graphviz

    1.2、使用

    安装后可使用dot命令将dot文件生成图片:

    dot -Tpng *.dot -o *.png

    更多用法可参考官网文档。

    http://www.graphviz.org/Home.php

    还有一个pygraphviz 不要和 下面介绍的pycallgraph混淆了。pygraphviz是用Python封装了graphviz使其可用python编写。

    pygraphviz官网:http://pygraphviz.github.io/index.html


     2、pycallgraph

     pycallgraph 可以创建python函数关系可视化图形,因为其依赖于dot命令,需要先安装 graphviz。

    2.1、下载安装

    官网源码安装或使用pip:

    pip install pycallgraph

    2.2、使用

    命令行使用(没试过):

    pycallgraph graphviz -- ./mypythonscript.py

    代码中使用:

    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput
    
    with PyCallGraph(output=GraphvizOutput()):
        code_to_profile()

    例子:

     1 #!/usr/bin/env python
     2 '''
     3 This example demonstrates a simple use of pycallgraph.
     4 '''
     5 from pycallgraph import PyCallGraph
     6 from pycallgraph.output import GraphvizOutput
     7 
     8 
     9 class Banana:
    10 
    11     def eat(self):
    12         pass
    13 
    14 
    15 class Person:
    16 
    17     def __init__(self):
    18         self.no_bananas()
    19 
    20     def no_bananas(self):
    21         self.bananas = []
    22 
    23     def add_banana(self, banana):
    24         self.bananas.append(banana)
    25 
    26     def eat_bananas(self):
    27         [banana.eat() for banana in self.bananas]
    28         self.no_bananas()
    29 
    30 
    31 def main():
    32     graphviz = GraphvizOutput()
    33     graphviz.output_file = 'basic.png'
    34 
    35     with PyCallGraph(output=graphviz):
    36         person = Person()
    37         for a in xrange(10):
    38             person.add_banana(Banana())
    39         person.eat_bananas()
    40 
    41 
    42 if __name__ == '__main__':
    43     main()
    View Code

    运行代码,生成basic.png:

    官网:

    http://pycallgraph.slowchop.com/en/master/index.html


     3、objgraph

    ( objgraph 和函数关系调用没什么关系,但是由于也使用dot,所以一并介绍。)

    objgraph模块 一般用于分析python对象相关问题,如内存泄漏。

    3.1、下载安装

    可官网源码安装,也可使用pip安装:

    pip install objgraph

    3.2、使用

    生成图片:

    更多用法可参考官网:

    http://mg.pov.lt/objgraph/

    转载于:https://www.cnblogs.com/GO-NO-1/p/7155684.html

    展开全文
  • (所以,使用的时候要关注一下你此次调用的“测试覆盖率”,尽可能全面的调用到每一个函数) 生成的图片示例 代码示例 1:在普通python程序中使用 # -*- coding: utf-8 -*- from pycallgraph import Config from ...

    一、下载并安装graphviz

    因为这个模块依赖Graphviz2.38这个软件,这个贝尔实验室大牛为画图提供的一个命令行工具。
    下载地址:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi

    安装(路径可任意选择)

    配置环境变量,在Path中添加graphvizbin目录所在路径。
    例如,我安装在F:\Program Files (x86)
    那么就添加环境变量F:\Program Files (x86)\Graphviz2.38\bin

    二、安装pycallgraph库

    pip install pycallgraph

    三、使用

    注意:只有你的操作使用了某个函数,才能显示在流图中。用户没有调用的函数则不会出现在流图中。
    (所以,使用的时候要考虑一下你此次调用的“测试覆盖率”,尽可能全面的调用到每一个函数)

    生成的图片示例

    在这里插入图片描述

    代码示例 1:在普通python程序中使用
    # -*- coding: utf-8 -*-
    
    from pycallgraph import Config
    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput
    from werkzeug.datastructures import ImmutableMultiDict
    
    from app.main.views import do_all_copy
    
    
    def main():
        # do something...
    
    
    
    if __name__ == "__main__":
        config = Config()
        # 关系图中包括(include)哪些函数名。
        # 如果是某一类的函数,例如类gobang,则可以直接写'gobang.*',表示以gobang.开头的所有函数。(利用正则表达式)。
        # config.trace_filter = GlobbingFilter(include=[
        #     'draw_chessboard',
        #     'draw_chessman',
        #     'draw_chessboard_with_chessman',
        #     'choose_save',
        #     'choose_turn',
        #     'choose_mode',
        #     'choose_button',
        #     'save_chess',
        #     'load_chess',
        #     'play_chess',
        #     'pop_window',
        #     'tip',
        #     'get_score',
        #     'max_score',
        #     'win',
        #     'key_control'
        # ])
        # 该段作用是关系图中不包括(exclude)哪些函数。(正则表达式规则)
        # config.trace_filter = GlobbingFilter(exclude=[
        #     'pycallgraph.*',
        #     '*.secret_function',
        #     'FileFinder.*',
        #     'ModuleLockManager.*',
        #     'SourceFilLoader.*'
        # ])
        graphviz = GraphvizOutput()
        graphviz.output_file = 'graph.png'
        with PyCallGraph(output=graphviz, config=config):
            main()
    
    代码示例 2:在Flask中使用

    如果你开发的是web应用,同样可以使用这个库。
    你只需要在你希望监测的函数中,添加如下代码:

    # 添加必要的import
    from pycallgraph import Config
    from pycallgraph import PyCallGraph
    from pycallgraph.output import GraphvizOutput
    
    
    @main.route('/example_mapping/', methods=[ 'GET','POST'])
    @login_required
    def example_mapping():
        config = Config()
        graphviz = GraphvizOutput()
        graphviz.output_file = 'graph.png'
        with PyCallGraph(output=graphviz, config=config):
            # 这里写原有的函数功能
            # do something...
            return render_template('example_mapping.html', jsondata=json_last, timejson=timejson)
    

    然后访问你的web服务页面,http://127.0.0.1:5000/example_mapping/即可。经过测试,此过程可能会比以往更慢一些。


    附:报错找不到dot的解决方式:

    遇到错误 pycallgraph.exceptions.PyCallGraphException: The command “dot” is required to be in your path.
    在这里插入图片描述

    解决方式

    You need to find dot.exe, which for me was in C:\Program Files (x86)\Graphviz2.38\bin so I went to the following: control panel > system > advanced system settings > Environment Variables... and then in the bottom box for System Variables, find Path, select it and select edit, then select new and paste the path in. Now close and reopen cmd.exe and see simple type in ‘dot’ and hit enter. If there’s no error, the path was setup properly.

    简单来说,就是你需要将C:\Program Files (x86)\Graphviz2.38\bin添加到环境变量的Path中,然后在cmd里面尝试运行dot这个命令,如果不报错,就可以正常使用了。

    展开全文
  • python打印函数调用关系图

    千次阅读 2018-08-10 21:15:54
    /usr/bin/env python # -*- coding: utf-8 -*- from pycallgraph import PyCallGraph from pycallgraph import Config from pycallgraph.output import GraphvizOutput import sys # sys....

    一、安装 graphviz

    系统版本
    linux ret hat x86_64
    安装
    yum install graphviz
    查询目录
    rpm -ql graphviz.x86_64
    检查安装成功
    -bash-4.2# which dot
    /usr/bin/dot

    二、安装pycallgraph

    pip install pycallgraph

    三、实例

            #!/usr/bin/env python
            # -*- coding: utf-8 -*-
            from pycallgraph import PyCallGraph
            from pycallgraph import Config
            from pycallgraph.output import GraphvizOutput
            import sys
            # sys.path.append("../")
            from jce2json2 import *
            graphviz = GraphvizOutput(output_file=r'trace_detail.png')
            with PyCallGraph(output=graphviz):
                jce2json2.lll()

    四、结果

    这里写图片描述

    展开全文
  • python函数调用

    千次阅读 2018-06-22 04:18:38
    python函数要先定义,然后才能调用,也就是说在python代码中要先将函数定义,然后才能是主程序。
    python函数要先定义,然后才能调用,也就是说在python代码中要先将函数定义,然后才能是主程序。
    展开全文
  • 利用graphviz软件和pycallgraph库自动生成Python代码函数调用关系图 @Author:CSU张扬 @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com 参考:...
  • 如何查看Python函数调用图 Ubuntu

    千次阅读 2017-12-07 14:49:42
    说明:有时候想看看Python函数调用图,此时  pycallgraph 就显示出他的用途了。 安装 pycallgraph pip install pycallgraph 安装 graphviz,使用dot -v 验证安装,记得将 /usr/bin/ 设置到 PATH路径 ...
  • python 函数调用问题

    千次阅读 2018-06-15 22:17:11
    本文主要解决python调用其他文件里的函数问题。 先将要调用函数写在一个文件里,以def开头。如: #coding=utf-8 #存储一些常用的图像操作 import os from PIL import Image from numpy import * from pylab ...
  • 一、安装相应的python包 graphviz pip install graphviz pycallgraph pip install pycallgraph 二、main函数 # 导入相应的包 from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput...
  • python打印函数调用关系

    千次阅读 2018-05-30 19:20:12
    使用python时,当想知道是哪里 调用的特定代码时,可在此特定代码前加下列语句: 网上搜到的其他信息 不如这个全 :)import sysprint ("--- current function is ", sys._getframe().f_code.co_name)...
  • 最近做OCR字符识别方面的工作,想通过讯飞的接口进行OCR识别,前面的算法预处理,分等工作是用C++完成的,但是用C++调用讯飞接口比较困难,于是想利用C++调用Python函数调用讯飞接口。 一丶Python调用讯飞...
  • 本文学习Python函数,包括:函数调用 定义函数 函数的参数 递归函数我们知道圆的面积计算公式为:S = π r*r当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积:r1 = 12.34 ...
  • 文章目录[Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph问题描述解决方案先上结果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200312132019214.png?x-oss-process=image/wat...
  • C++之python函数调用

    千次阅读 2011-12-01 13:04:52
    代码如下,分别演示直接执行python语句、无返回无参数函数调用、返回单参数函数调用。返回多参数函数调用:  #include  #include  using namespace std;  //执行python命令  void ExecPythonCommand() ...
  • Python3.x + Graphviz自动化绘制C语言 函数调用关系图、结构体关系图 已使用Cython将Python代码转化为c,可以自行编译安装 1.2. 软件架构 软件架构说明 1.3. 安装教程 sudo -H pip3 in...
  • python函数调用另外的一个函数

    千次阅读 2020-08-20 17:49:14
    1、使用场景:一个发送短信的函数,一个登陆的函数,登陆前需要调用发送短信 def send_message(ip): """1、发送短信""" url = "http://" + ip + ".123.com/api/sms/send" print(url) params = { "mobile": ...
  • 使用 python脚本获取函数调用关系

    千次阅读 2015-12-01 21:19:07
    函数关系调用图可使用TestBed或者Source Insight软件生成。本文工具所提取的函数调用关系,是为了方便编写详细设计文档,自动将该函数所有调用的函数列举出来。 首先上传代码流程图:
  • 1、python函数的应用一般需要:先定义、后调用: 2、如果函数定义在调用之后,执行将报错: 3、函数中调用函数不受此限制: 4、但是语句对函数调用,必须在函数调用之后,包括直接调用的函数调用的其他函数...
  • python生成脚本文件的函数调用关系图 安装graphiviz, 包含了dot命令 利用pyan生成dot文件 python pyan.py YOURFILE.py --uses --no-defines --colored --grouped --annotated --dot >myfile.dot ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 576,373
精华内容 230,549
关键字:

python函数调用关系图

python 订阅