Skip to main content

Parse the output of `python -X importtime` and convert it to other formats.

Project description

Overview

This is a CLI tool and small library to parse the output of python -X importtime and convert it to other formats. Use it to help visualize and understand your Python import times—for example, by generating flame graphs.

Usage as a CLI tool

This tool expects the raw -X importtime data on stdin and outputs the converted result on stdout.

Typical usage example, with Bash redirection syntax:

# Python outputs its raw importtime data to stderr. Save it to raw_importtime.txt.
python -X importtime -c 'import module_to_test' 2> raw_importtime.txt
# Convert it to "flamegraph.pl" format and save that to converted_importtime.txt.
python -m importtime_convert --output-format flamegraph.pl <raw_importtime.txt >converted_importtime.txt

Or, all in one step:

python -X importtime -c 'import module_to_test' \
    2>&1 >/dev/null \
    | python -m importtime_convert --output-format flamegraph.pl \
    > converted_importtime.txt

See the available output formats below and python -m importtime_convert --help for full details.

Usage as a library

The following are available from import importtime_convert:

parse(input: typing.TextIO | str) -> list[Import]

parse() takes the raw -X importtime data, as a string or as a file-like object. It returns the parsed import structure as a list of top-level imports. The list is in the order that the interpreter traversed them.

Import

An Import is a dataclass with the following keys:

  • package: str: The full package path of this import, e.g. "foo.bar".
  • cumulative_us: int: The time, in microseconds, that the interpreter spent on this module, including any subimports.
  • self_us: int: The time, in microseconds, that the interpreter spent on this module, not including any subimports.
  • subimports: list[Import]: This module's subimports. The list is in the order that the interpreter traversed them.

Output conversion functions

  • to_flamegraph_pl(imports: list[Import]) -> str
  • to_json_serializable(imports: list[Import]) -> list[dict[str, Any]]

See the available output formats below for details.

Available output formats

  • --output-format flamegraph.pl (CLI) / to_flamegraph_pl() (API)

    For flame graph generation tools.

    The format is defined by Brendan Gregg's flamegraph.pl script, but other flame graph tools accept it, too. (For example, https://www.speedscope.app/ and https://flamegraph.com/.)

  • --output-format json (CLI) / to_json_serializable() (API)

    A simple JSON format specific to this tool. Looks like this:

    [
      {
        "package": "foo",
        "self_us": 200,
        "cumulative_us": 300,
        "subimports": [
          {
            "package": "bar",
            "self_us": 100,
            "cumulative_us": 100,
            "subimports": []
          }
        ]
      },
      {
        "package": "baz.baz",
        "self_us": 100,
        "cumulative_us": 100,
        "subimports": []
      }
    ]
    

    See the API docs above for the meanings of the fields.

Feature requests and pull requests are welcome for additional output formats.

Related work and alternatives

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

importtime_convert-1.0.0.post1.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

importtime_convert-1.0.0.post1-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file importtime_convert-1.0.0.post1.tar.gz.

File metadata

  • Download URL: importtime_convert-1.0.0.post1.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for importtime_convert-1.0.0.post1.tar.gz
Algorithm Hash digest
SHA256 2eb16526de4b5da69ec74caa120a8aa0982728de854d0d2c8dd5652c4b11a617
MD5 41cf32416d901cde3fa57f89e11015f4
BLAKE2b-256 66448043a265a7039a562e2e2344a9577f7acd16aa32d1302ab9f8caaef7a326

See more details on using hashes here.

Provenance

The following attestation bundles were made for importtime_convert-1.0.0.post1.tar.gz:

Publisher: deploy.yml on SyntaxColoring/importtime_convert

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file importtime_convert-1.0.0.post1-py3-none-any.whl.

File metadata

File hashes

Hashes for importtime_convert-1.0.0.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 a10143dbf681fb689d1305a4390b6c95cccc9618b396847862efb6dca0ea6c1e
MD5 5caacd996dc26970617f81fc69a04b8a
BLAKE2b-256 8653cc97b502388438f703be9997dfdc204682751343782a1ea51476efef4f08

See more details on using hashes here.

Provenance

The following attestation bundles were made for importtime_convert-1.0.0.post1-py3-none-any.whl:

Publisher: deploy.yml on SyntaxColoring/importtime_convert

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page