Sign inDemoInstall


Package Overview
File Explorer

Install Socket

Protect your apps from supply chain attacks



Syntax-highlighting, declarative and composable pretty printer for Python 3.5+






Syntax-highlighting, declarative and composable pretty printer for Python 3.5+

.. code:: bash

    pip install prettyprinter

- Drop in replacement for the standard library ``pprint``: just rename ``pprint`` to ``prettyprinter`` in your imports.
- Uses a modified Wadler-Leijen layout algorithm for optimal formatting
- Write pretty printers for your own types with a dead simple, declarative interface

.. image:: prettyprinterscreenshot.png

.. image:: ../prettyprinterscreenshot.png

.. image:: prettyprinterlightscreenshot.png

.. image:: ../prettyprinterlightscreenshot.png

Pretty print common Python values:

.. code:: python

    >>> from datetime import datetime
    >>> from prettyprinter import pprint
    >>> pprint({'beautiful output':})
        'beautiful output': datetime.datetime(

As well as your own, without any manual string formatting:

.. code:: python

    >>> class MyClass:
    ...     def __init__(self, one, two):
    ... = one
    ...         self.two = two

    >>> from prettyprinter import register_pretty, pretty_call

    >>> @register_pretty(MyClass)
    ... def pretty_myclass(value, ctx):
    ...     return pretty_call(ctx, MyClass,, two=value.two)

    >>> pprint(MyClass((1, 2, 3), {'a': 1, 'b': 2}))
    MyClass(one=(1, 2, 3), two={'a': 1, 'b': 2})

    >>> pprint({'beautiful output':, 'beautiful MyClass instance': MyClass((1, 2, 3), {'a': 1, 'b': 2})})
        'beautiful MyClass instance': MyClass(
            one=(1, 2, 3),
            two={'a': 1, 'b': 2}
        'beautiful output': datetime.datetime(

Comes packaged with the following pretty printer definitions, which you can enable by calling ``prettyprinter.install_extras()``:

- ``datetime`` - (installed by default)
- ``enum`` - (installed by default)
- ``pytz`` - (installed by default)
- ``dataclasses`` - any new class you create will be pretty printed automatically
- ``attrs`` - pretty prints any new class you create with ``attrs``
- ``django`` - pretty prints your Models and QuerySets
- ``numpy`` - pretty prints numpy scalars with explicit types
- ``requests`` - pretty prints Requests, Responses, Sessions, and more from the ``requests`` library

* Free software: MIT license
* Documentation: Documentation_.

.. _Documentation:


0.18.0 (2019-06-21)

* `Improve prettyprinting of builtin bound methods. <>`_ by `@anntzer <>`_
* `Fix test suite compatibility with hypothesis4. <>`_ by `@anntzer <>`_
* `Use $COLORFGBG to help decide whether to use a dark or light style <>`_ by `@crowsonkb <>`_
* `Truncate numpy arrays with ndim >= 2 so that the total printed does not exceed max_seq_len <>`_ by `@crowsonkb <>`_
* Fixed ipython_repr_pretty extra raising an exception when printing Mock instances (GH #61)
* Added support for pretty printing types.SimpleNamespace (GH #60)
* Fixed dictionary pretty printing indentation when the value had a comment on the line above (GH #59)

0.17.0 (2019-03-14)

* `Add prettyprinter for numpy ndarrays. <>`_ by `@anntzer <>`_
* `Add helper to apply default config. <>`_ by `@anntzer <>`_
* A number of docs and CI improvements: `#43 <>`_, `#44 <>`_, `#45 <>`_ .Thanks `@anntzer <>`_
* `Add support for functools.partialmethod. <>`_ by `@anntzer <>`_
* `Fix typo in changelog. <>`_ Thanks `@Vlad-Shcherbina <>`_

0.16.0 (2019-02-27)

* `Adds a new extra for numpy. <>`_ The extra currently registers pretty printers for numpy scalar types. Enable it with ``import prettyprinter; prettyprinter.install_extras(['numpy'])``. Thanks `@anntzer <>`_
* `C-API named tuples are now automatically prettyprinted. <>`_ C-API named tuples are returned from expressions such as ``sys.flags``, ``time.strptime(...)``, and ``os.stat(...)``. The fieldname of each tuple element is annotated using a comment in the output.

0.15.0 (2019-02-25)

This release brings bugfixes, an enhancement to pathlib prettyprinting (thanks `@anntzer <>`_ ) and a nice performance boost. There was an redundant subtree call in a tree normalization procedure that caused exponential runtime, worsening quickly if data was highly nested. That extra call is now removed.

* `Fix exponential runtime in highly nested data <>`_
* `Fix infinite loop when rendering strings in highly nested data <>`_
* `Only split Path prettyprints on "/", not on "-" or other nonword chars. <>`_ , thanks `@anntzer <>`_
* `Add vim swapfiles to gitignore <>`_ , thanks `@anntzer <>`_
* `Fix typo <>`_ , thanks `@anntzer <>`_

0.14.0 (2018-07-25)

Most likely no breaking changes.

* Added definitions for ``pathlib`` standard library module thanks to GitHub user ``RazerM``
* Fixed unexpected error output inside Jupyter notebooks thanks to GitHub user ``jdanbrown``
* Fixed missing commas in ```` requirements list

0.13.2 (2018-05-29)

No breaking changes.

* Fixed the dataclasses pretty printer that had regressed after changes to the dataclasses API. Fix was contributed by GitHub user ``dangirsh``.

0.13.1 (2018-02-03)

No breaking changes.

* Fixed GH issue #17 where Django models showed an incorrect display name for fields with choices.

0.13.0 (2018-02-03)

No breaking changes.

* Added definitions for the ``ast`` standard library module thanks to GitHub user ``johnnoone``.

0.12.0 (2018-01-22)

No breaking changes.

* Added a definition for classes that look like they were built with ``collections.namedtuple``
* If a pretty printer raises an exception, it is caught and emitted as a warning, and the default repr implementation will be used instead.
* Added definitions for ``collections.ChainMap``, ``collections.defaultdict``, ``collections.deque``, ``functools.partial``, and for exception objects.
* Made pretty printers for primitive types (dict, list, set, etc.) render a subclass constructor around them

0.11.0 (2018-01-20)

No breaking changes.

* Added Python 3.5 support
* Added ``pretty_call_alt`` function that doesn't depend on ``dict`` maintaining insertion order
* Fixed bug in ``set_default_config`` where most configuration values were not updated
* Added ``get_default_config``

0.10.1 (2018-01-10)

No breaking changes.

* Fixed regression with types.MappingProxyType not being properly registered.

0.10.0 (2018-01-09)

No breaking changes.

* Added support for deferred printer registration, where instead of a concrete type value, you can pass a qualified path to a type as a ``str`` to ``register_pretty``. For an example, see `the deferred printer registration for uuid.UUID <>`_

0.9.0 (2018-01-03)

No breaking changes.

* Added pretty printer definition for ``types.MappingProxyType`` thanks to GitHub user `Cologler <>`_
* Added support for ``_repr_pretty_`` in the extra ``ipython_repr_pretty``.

0.8.1 (2018-01-01)

* Fixed issue #7 where having a ``str`` value for IPython's ``highlighting_style`` setting was not properly handled in ``prettyprinter``'s IPython integration, and raised an exception when trying to print data.

0.8.0 (2017-12-31)

Breaking changes:

* by default, ``dict`` keys are printed in the default order (insertion order in CPython 3.6+). Previously they were sorted like in the ``pprint`` standard library module. To let the user control this, an additional keyword argument ``sort_dict_keys`` was added to ``cpprint``, ``pprint``, and ``pformat``. Pretty printer definitions can control ``dict`` key sorting with the ``PrettyContext`` instance passed to each pretty printer function.

Non-breaking changes:

* Improved performance of rendering colorized output by caching colors.
* Added ``prettyprinter.pretty_repr`` that is assignable to ``__repr__`` dunder methods, so you don't need to write it separately from the pretty printer definition.
* Deprecated use of ``PrettyContext.set`` in favor of less misleading ``PrettyContext.assoc``
* Defined pretty printing for instances of ``type``, i.e. classes.
* Defined pretty printing for functions

0.7.0 (2017-12-23)

Breaking change: instances of lists, sets, frozensets, tuples and dicts will be truncated to 1000 elements by default when printing.

* Added pretty printing definitions for ``dataclasses``
* Improved performance of splitting strings to multiple lines by ~15%
* Added a maximum sequence length that applies to subclasses of lists, sets, frozensets, tuples and dicts. The default is 1000. There is a trailing comment that indicates the number of truncated elements. To remove truncation, you can set ``max_seq_len`` to ``None`` using ``set_default_config`` explained below.
* Added ability to change the default global configuration using ``set_default_config``. The functions accepts zero to many keyword arguments and replaces those values in the global configuration with the ones provided.

.. code:: python

    from prettyprinter import set_default_config


0.6.0 (2017-12-21)

No backwards incompatible changes.

* Added pretty printer definitions for the ``requests`` library. To use it, include ``'requests'`` in your ``install_extras`` call: ``prettyprinter.install_extras(include=['requests'])``.

0.5.0 (2017-12-21)

No backwards incompatible changes.

* Added integration for the default Python shell
* Wrote docs to explain integration with the default Python shell
* Check ``install_extras`` arguments for unknown extras

0.4.0 (2017-12-14)

* Revised ``comment`` to accept both normal Python values and Docs, and reversed the argument order to be more Pythonic

0.3.0 (2017-12-12)

* Add ``set_default_style`` function, improve docs on working with a light background

0.2.0 (2017-12-12)

* Numerous API changes and improvements.

0.1.0 (2017-12-07)

* First release on PyPI.



Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.


Related posts

SocketSocket SOC 2 Logo


  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc