因为这个模块依赖Graphviz2.38这个软件,这个贝尔实验室大牛为画图提供的一个命令行工具。
下载地址:https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi
配置环境变量,在Path
中添加graphviz
的bin
目录所在路径。
例如,我安装在F:\Program Files (x86)
那么就添加环境变量F:\Program Files (x86)\Graphviz2.38\bin
pip install pycallgraph
注意:只有你的操作使用了某个函数,才能显示在流图中。用户没有调用的函数则不会出现在流图中。
(所以,使用的时候要考虑一下你此次调用的“测试覆盖率”,尽可能全面的调用到每一个函数)
# -*- 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()
如果你开发的是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
这个命令,如果不报错,就可以正常使用了。