Introduction
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 committing 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 to decide which packages you'd like to update, if any at all.
Update All Packages with pip-review
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.
Update All Packages Interactively with pip-review
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 dependency issues, a common problem.
In these cases, you'd want to pin the specific packages that 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.
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
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:
matplotlib==3.1.3
pandas==1.0.3
Conclusion
Updating packages using pip
can be tedious and time-consuming. And 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.