Updating Python packages can be a hassle. There are many of them - it's hard to keep track of all the newest versions, and even when you decide what to update, you still have to update each of them manually.

To address this issue, pip-review was created. It lets you smoothly manage all available PyPi updates with simple commands.

Originally a part of the pip-tools package, it now lives on as a standalone convenience wrapper around pip. In this tutorial, we'll be covering how to update all packages with pip-review.

Install pip-review

You can install pip-review in a virtual environment, if you'd like to contain it, or system-wide. Naturally, installing pip-review is done via pip:

$ pip install pip-review
Successfully installed pip-review-1.1.0

Help Page of pip-review

If you forget any of these commands or you simply want an overview of the command options:

$ pip-review -h
usage: pip-review [-h] [--verbose] [--raw] [--interactive] [--auto] Keeps your Python packages fresh. Looking for a new maintainer! See https://github.com/jgonggrijp/pip-review/issues/76 optional arguments: -h, --help show this help message and exit --verbose, -v Show more output --raw, -r Print raw lines (suitable for passing to pip install) --interactive, -i Ask interactively to install updates --auto, -a Automatically install every update found Unrecognised arguments will be forwarded to pip list --outdated and pip install, so you can pass things such as --user, --pre and --timeout and they will do what you expect. See pip list -h and pip install -h
for a full overview of the options.

Check All Package Versions with pip-review

Sometimes, you'd just want to check if there are any updates, before commiting to a potentially long update list. To check all package versions, you simply run:

$ pip-review
scikit-learn==0.23.2 is available (you have 0.23.1)
scipy==1.5.4 is available (you have 1.4.1)
seaborn==0.11.0 is available (you have 0.10.1)

This gives you a report that lists all available package updates. Essentially, it calls pip list – outdated. This has the advantage of allowing you decide which packages you'd like to update, if any at all.

Once you've identified if you'd like to update your packages, you can update them all, automatically, using:

$ pip-review --auto
Collecting beautifulsoup4==4.9.3
Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)

Running just this command alone - you’re set to go. It’s that simple.

If you perhaps don't wish to update some specific packages, you don't need to run the --auto updater. If you launch the process as --interactive, you can choose for each individual package whether you'd like to update it or no:

$ pip-review --interactive
matplotlib==3.3.3 is available (you have 3.1.3)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit N
numpy==1.19.4 is available (you have 1.18.1)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit Y
pandas==1.1.5 is available (you have 1.0.3)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit N

For each package, you have four options available, “Yes”, “No”, “All” and “Quit”.

Selecting “Yes” indicates you want that particular package added to the "to-be-updated-list". At the end every package on this list gets updated.

If you end up selecting “No” it would mean the package won't get updated. Selecting “All” means all packages moving forward will be added to the list. Finally, selecting “Quit” would mean pip-review will skip all remaining packages and update only the ones you selected “Yes” to.

Prevent pip-review from Updating Certain Packages

In some situations, you might want to prevent certain packages from automatically updating when running pip-review --auto. This could be perhaps to avoid dependencies issues, a common problem.

In these cases, you’d want to pin the specific packages you don't want to update. You can do this via a constraint file. A constraint file is a requirement file that only controls which version of a requirement is installed, not whether it is installed or not.

Its syntax and contents are identical to that of requirement files. There is one key difference:

Including a package in a constraints file doesn’t trigger installation of the package.

Let's make a constraints.txt file:

$ export PIP_CONSTRAINT="/home/username/constraints.txt

And now within it, we'll insert:



Updating packages using pip can be tedious and time-consuming. And as as expected in the computer science world, a tool was born to automate this. In this article, we've gone over the pip-review utility - how to install it, as well as how to use it to update packages in Python.