Icecream: Never use print() to debug again in Python

This page summarizes the projects mentioned and recommended in the original post on

Our great sponsors
  • Sonar - Write Clean Python Code. Always.
  • InfluxDB - Access the most powerful time series database as a service
  • SaaSHub - Software Alternatives and Reviews
  • icecream

    🍦 Never use print() to debug again.

    It seems like it was a coincidence. See comment thread:

  • q

    Quick and dirty debugging output for tired programmers. ⛺ (by zestyping)

    For an even easier-to-remember alternative, there’s q:

    All you need is `import q`. q works like a function (q(x)), like a variable (q|x and q/x, so you get different operator precedences) and like a decorator (@q), so it can be used in practically any circumstance for a quick debug print. Plus, the name sounds like you’re interrogating something.

  • Sonar

    Write Clean Python Code. Always.. Sonar helps you commit clean code every time. With over 225 unique rules to find Python bugs, code smells & vulnerabilities, Sonar finds the issues while you focus on the work.

  • python-devtools

    Dev tools for python

    __builtins__['debug'] = debug


    This would work with icecream too.

    The second advantage of not needing the import is that CI fails if you forget to remove all debug() commands.

  • PySnooper

    Never use print for debugging again

    Funny, a few months back I added this sentence to PySnooper's readme:

    "PySnooper is a poor man's debugger. If you've used Bash, it's like set -x for Python, except it's fancier."

  • py_better_exchook

    nice Python exception hook replacement

    If you like this, you might also like my small debugging utility, a better_exchook replacement:

    Simple example:

        assert x == 4

  • ray

    Debug with Ray to fix problems faster (by spatie)

    I am the same, it's the most easy. Very interesting is that in the laravel php world currently an interesting product is gaining momentum: Ray (

    So basically it's dump with a lot of neat extras and instead of looking at the console of the script, or the website you are printing on you push this to a little desktop application, from every of your languages you are using. Something like log collection for everything on your desktop.

  • pdbpp

    pdb++, a drop-in replacement for pdb (the Python debugger)

    I like to use PDB++ which is a drop in replacement for PDB

  • InfluxDB

    Access the most powerful time series database as a service. Ingest, store, & analyze all types of time series data in a fully-managed, purpose-built database. Keep data forever with low-cost storage and superior data compression.

  • panopticon

    Python tracing module to visualize code execution.

    I've built to easily trace function execution to handle a similar use case, except that it generates output for chrome://tracing instead of printing out lines.

    cPython's settrace/setprofile functionality enables so many cool tools.

  • pyset_x

    Like `set -x` in bash, for Python

    I started writing a very-alpha related tool, As the name implies, it's like `set -x` in bash, in that it prints every line as it executes. It's more useful for situations where you have some complicated control flow and it's not working exactly how you expect.

  • snoop

    A powerful set of Python debugging tools, based on PySnooper (by alexmojaki)

  • Puts Debuggerer

    Ruby library for improved puts debugging, automatically displaying bonus useful information such as source line number and source code.

    I was wondering if there was anything like this for Ruby. Turns out there is: With this library,

      pd bug_or_band

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts