progressbar2 4.6.0


pip install progressbar2

  Latest version

Released: Aug 14, 2026


Meta
Author: Rick van Hattem (Wolph)
Requires Python: >=3.10

Classifiers

Development Status
  • 5 - Production/Stable
  • 6 - Mature

Environment
  • Console
  • MacOS X
  • Other Environment
  • Win32 (MS Windows)
  • X11 Applications

Framework
  • IPython
  • Jupyter

Intended Audience
  • Developers
  • Education
  • End Users/Desktop
  • Other Audience
  • System Administrators

License
  • OSI Approved :: BSD License

Natural Language
  • English

Operating System
  • MacOS :: MacOS X
  • MacOS
  • Microsoft :: MS-DOS
  • Microsoft :: Windows
  • Microsoft
  • POSIX :: BSD :: FreeBSD
  • POSIX :: BSD
  • POSIX :: Linux
  • POSIX :: SunOS/Solaris
  • POSIX
  • Unix

Programming Language
  • Python :: 3 :: Only
  • Python :: 3
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14
  • Python :: 3.15
  • Python :: Implementation :: IronPython
  • Python :: Implementation :: PyPy
  • Python :: Implementation
  • Python
  • Unix Shell

Topic
  • Desktop Environment
  • Education :: Computer Aided Instruction (CAI)
  • Education :: Testing
  • Office/Business
  • Other/Nonlisted Topic
  • Software Development :: Build Tools
  • Software Development :: Libraries
  • Software Development :: Libraries :: Python Modules
  • Software Development :: Pre-processors
  • Software Development :: User Interfaces
  • System :: Installation/Setup
  • System :: Logging
  • System :: Monitoring
  • System :: Shells
  • Terminals
  • Utilities

Typing
  • Typed

A typed terminal progress bar library for Python. It handles custom widgets, clean output around prints and logs, multiple concurrent bars, unknown-length progress, and pipe-friendly CLI usage.

python-progressbar test status coverage status

Install

pip install progressbar2

Quick start

import time
import progressbar

for item in progressbar.progressbar(range(100), desc='Loading'):
    time.sleep(0.02)

Try it in your browser

Every example in the documentation runs live in the page. Press Run on any code block, no install required.

Progress with clean logs

progressbar2 showing clean progress output with logs
"""A build log printing above a progress bar without corrupting it."""

from __future__ import annotations

import time

import progressbar

STEPS = 24


def main() -> None:
    with progressbar.ProgressBar(
        max_value=STEPS,
        prefix='Build ',
        redirect_stdout=True,
    ) as bar:
        for step in range(STEPS):
            if step in {8, 16}:
                print(f'log: completed step {step}')
            bar.update(step + 1)
            # Longer than the bar's 0.05s update gate, so every step
            # lands as a visible redraw.
            time.sleep(0.1)


if __name__ == '__main__':
    main()

Multiple bars

multiple progress bars updating together
"""Two named bars progressing at different rates in one terminal."""

from __future__ import annotations

import sys
import time

import progressbar

STEPS = 24


def main() -> None:
    with progressbar.MultiBar(fd=sys.stdout) as multibar:
        build = multibar['build']
        test = multibar['test']
        build.max_value = STEPS
        test.max_value = STEPS
        for step in range(STEPS):
            build.update(step + 1)
            test.update(min(STEPS, max(0, round((step - 3) * 1.2))))
            # Longer than the bars' 0.05s update gate, so every step
            # lands as a visible redraw.
            time.sleep(0.1)

        # Reaching max_value doesn't finish a bar -- only finish() does.
        # A MultiBar waits for every bar to report finished() before its
        # context manager can exit, so without these calls the block
        # above would hang forever on exit.
        build.finish()
        test.finish()


if __name__ == '__main__':
    main()

Unknown length and animated bars

unknown length progress with an animated marker
"""A bar for work whose total is not known up front."""

from __future__ import annotations

import time

import progressbar


def main() -> None:
    with progressbar.ProgressBar(
        max_value=progressbar.UnknownLength,
    ) as bar:
        for value in range(0, 120, 10):
            bar.update(value)
            # Longer than the bar's 0.05s update gate, so every step
            # lands as a visible redraw.
            time.sleep(0.1)


if __name__ == '__main__':
    main()

CLI usage

progressbar --progress --timer --eta --rate --bytes input.bin -o output.bin

Known terminal caveats

  • JetBrains IDEs need “Enable terminal in output console” for advanced terminal behavior such as MultiBar.

  • IDLE does not support terminal progress bars.

  • Jupyter buffers stdout; call sys.stdout.flush() when output appears late.

Project history

progressbar2 is based on the old Python progressbar package that was published on the now defunct Google Code. Since that project was completely abandoned by its developer and the developer did not respond to email, I decided to fork the package.

This package is still backwards compatible with the original progressbar package so you can use it as a drop-in replacement for existing projects.

4.6.0 Aug 14, 2026
4.5.0 Aug 28, 2024
4.4.3 Aug 23, 2024
4.4.2 Mar 05, 2024
4.4.1 Feb 25, 2024
4.4.0 Feb 25, 2024
4.3.2 Dec 18, 2023
4.3.1 Dec 18, 2023
4.3.0 Dec 18, 2023
4.3b0 Nov 01, 2022
4.2.0 Oct 26, 2022
4.1.1 Oct 18, 2022
4.1.0 Oct 18, 2022
4.0.0 Jan 05, 2022
3.55.0 Oct 15, 2021
3.54.0 Oct 12, 2021
3.53.3 Sep 14, 2021
3.53.2 Sep 09, 2021
3.53.1 Sep 09, 2020
3.53.0 Sep 09, 2020
3.52.1 Aug 29, 2020
3.51.4 Jun 25, 2020
3.51.3 May 02, 2020
3.51.2 May 01, 2020
3.51.1 Apr 29, 2020
3.51.0 Apr 20, 2020
3.50.1 Mar 20, 2020
3.50.0 Mar 03, 2020
3.47.0 Sep 30, 2019
3.46.1 Sep 19, 2019
3.46.0 Sep 18, 2019
3.45.1 Sep 19, 2019
3.43.1 Aug 21, 2019
3.42.0 May 31, 2019
3.41.0 May 29, 2019
3.39.3 Mar 13, 2019
3.39.2 Dec 17, 2018
3.39.0 Dec 16, 2018
3.38.0 May 26, 2018
3.37.1 Apr 12, 2018
3.37.0 Apr 06, 2018
3.36.0 Mar 04, 2018
3.35.2 Feb 14, 2018
3.35.1 Feb 13, 2018
3.35.0 Feb 12, 2018
3.34.3 Sep 21, 2017
3.34.2 Aug 05, 2017
3.34.0 Aug 03, 2017
3.33.2 Jul 29, 2017
3.33.1 Jul 29, 2017
3.33.0 Jul 28, 2017
3.32.1 Jul 24, 2017
3.32.0 Jul 23, 2017
3.31.1 Jul 23, 2017
3.30.2 Jun 02, 2017
3.30.0 May 30, 2017
3.20.2 May 26, 2017
3.20.1 May 25, 2017
3.20.0 May 05, 2017
3.18.1 Apr 14, 2017
3.18.0 Apr 08, 2017
3.17.1 Apr 04, 2017
3.17.0 Apr 03, 2017
3.16.1 Mar 30, 2017
3.16.0 Mar 17, 2017
3.15.1 Mar 17, 2017
3.15.0 Mar 15, 2017
3.12.0 Dec 21, 2016
3.11.0 Nov 13, 2016
3.10.1 Sep 10, 2016
3.10.0 Jul 16, 2016
3.9.4 Jul 03, 2016
3.9.3 Jun 26, 2016
3.9.2 Jun 26, 2016
3.9.1 Jun 24, 2016
3.9.0 Jun 23, 2016
3.8.1 Jun 25, 2016
3.8.0 Jun 18, 2016
3.7.0 Jun 11, 2016
3.6.2 Mar 02, 2016
3.6.1 Mar 01, 2016
3.6.0 Dec 23, 2015
3.5.2 Dec 19, 2015
3.5.1 Nov 30, 2015
3.5.0 Nov 15, 2015
3.4.3 Nov 15, 2015
3.4.2 Nov 15, 2015
3.4.1 Nov 11, 2015
3.4.0 Nov 11, 2015
3.3.3 Nov 11, 2015
3.3.2 Nov 10, 2015
3.3.1 Nov 05, 2015
3.3.0 Oct 12, 2015
3.2.0 Oct 11, 2015
3.1.0 Oct 10, 2015
3.0.1 Oct 07, 2015
2.7.3 Nov 28, 2014
2.7.0 Nov 25, 2014
2.6.9 Nov 19, 2014
2.6.8 Nov 17, 2014
2.6.7 Sep 03, 2014
2.6.6 Sep 03, 2014
2.6.5 Sep 03, 2014
2.6.4 Sep 02, 2014
2.6.3 Sep 02, 2014
2.6.2 Jun 03, 2014
2.6.1 May 12, 2014
2.6.0 Sep 23, 2013
2.5.0 Sep 23, 2013
2.4.1 Aug 20, 2013
2.4.0 Aug 20, 2013

Wheel compatibility matrix

Platform Python 3
any

Files in release

Extras:
Dependencies:
python-utils (>=3.8.1)