---
name: "pyprof2calltree"
section: "1"
platform: "linux"
package: "pyprof2calltree"
version: "1.4.5-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/pyprof2calltree"
---

# pyprof2calltree(1)

visualize Python cProfile data in kcachegrind

## NAME

Pyprof2calltree - visualize Python cProfile data in kcachegrind

## DESCRIPTION

Script to help visualize profiling data collected with the cProfile Python module with the *kcachegrind*  graphical calltree analyser.

This is a rebranding of the venerable *http://www.gnome.org/~johan/lsprofcalltree.py* script by David Allouche et Al. It aims at making it easier to distribute (e.g. through PyPI) and behave more like the scripts of the debian *kcachegrind-converters* package. The final goal is to make it part of the official upstream *kdesdk* package.

## OPTIONS

Upon installation you should have a *pyprof2calltree* script in your path:

```
$ pyprof2calltree --help
usage: pyprof2calltree [-h] [-o output_file_path] [-i input_file_path] [-k]
                       [-r scriptfile [args ...]]
optional arguments:
  -h, --help            show this help message and exit
  -o output_file_path, --outfile output_file_path
                        Save calltree stats to <outfile>
  -i input_file_path, --infile input_file_path
                        Read Python stats from <infile>
  -k, --kcachegrind     Run the kcachegrind tool on the converted data
  -r scriptfile [args ...], --run-script scriptfile [args ...]
                        Name of the Python script to run to collect profiling
                        data
```

## PYTHON SHELL USAGE

*pyprof2calltree* is also best used from an interactive Python shell such as the default shell. For instance let us profile XML parsing:

```
>>> from xml.etree import ElementTree
>>> from cProfile import Profile
>>> xml_content = '<a>\n' + '\t<b/><c><d>text</d></c>\n' * 100 + '</a>'
>>> profiler = Profile()
>>> profiler.runctx(
...     "ElementTree.fromstring(xml_content)",
...     locals(), globals())
>>> from pyprof2calltree import convert, visualize
>>> visualize(profiler.getstats())                            # run kcachegrind
>>> convert(profiler.getstats(), 'profiling_results.kgrind')  # save for later
```

or with the *ipython*:

```
In [1]: %doctest_mode
Exception reporting mode: Plain
Doctest mode is: ON
>>> from xml.etree import ElementTree
>>> xml_content = '<a>\n' + '\t<b/><c><d>text</d></c>\n' * 100 + '</a>'
>>> %prun -D out.stats ElementTree.fromstring(xml_content)
*** Profile stats marshalled to file 'out.stats'
>>> from pyprof2calltree import convert, visualize
>>> visualize('out.stats')
>>> convert('out.stats', 'out.kgrind')
>>> results = %prun -r ElementTree.fromstring(xml_content)
>>> visualize(results)
```
