How to upgrade all Python packages with pip
Solution 1:
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
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!
In older version of pip
, you can use this instead:
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 replace grep
+cut
with sed
or awk
or perl
or...).
The -n1
flag for xargs
prevents stopping everything if updating one package fails (thanks @andsens).
Solution 2:
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)
Solution 3:
To upgrade all local packages; you could use pip-review
:
$ pip install pip-review
$ pip-review --local --interactive
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
works on Windows since version 0.5.