How to upgrade all Python packages with pip
There isn't a built-in flag yet, but you can use:
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
For older versions of pip
:
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
The
grep
is to skip editable ("-e") package definitions, as suggested by @jawache. (Yes, you could replacegrep
+cut
withsed
orawk
orperl
or...).The
-n1
flag forxargs
prevents stopping everything if updating one package fails (thanks @andsens).
Note: there are infinite potential variations for this. I'm trying to keep this answer short and simple, but please do suggest variations in the comments!
To upgrade all local packages, you can install pip-review
:
$ pip install pip-review
After that, you can either upgrade the packages interactively:
$ pip-review --local --interactive
Or automatically:
$ pip-review --local --auto
pip-review
is a fork of pip-tools
. See pip-tools
issue mentioned by @knedlsepp. pip-review
package works but pip-tools
package no longer works. pip-review
is looking for new maintainer.
pip-review
works on Windows since version 0.5.
You can use the following Python code. Unlike pip freeze
, this will not print warnings and FIXME errors.
For pip < 10.0.1
import pip
from subprocess import call
packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)
For pip >= 10.0.1
import pkg_resources
from subprocess import call
packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)