Est-il possible de mettre à jour tous les paquets Python en une seule fois avec [pip
][1] ?
Note : il y a [une demande de fonctionnalité][2] pour cela sur le gestionnaire de problèmes officiel.
[1] : https://pypi.python.org/pypi/pip [2] : https://github.com/pypa/pip/issues/59
Il n’y a pas encore d’indicateur intégré, mais vous pouvez utiliser la commande
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Remarque : il existe une infinité de variantes possibles. J'essaie de garder cette réponse courte et simple, mais n'hésitez pas à suggérer des variantes dans les commentaires !
Dans les anciennes versions de pip
, vous pouvez utiliser ceci à la place :
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
Le grep
permet d'ignorer les définitions de paquet éditables ("-e" ;), comme suggéré par @jawache. (Oui, vous pourriez remplacer grep
+cut
par sed
ou awk
ou perl
ou...).
L'option -n1
pour xargs
empêche de tout arrêter si la mise à jour d'un paquet échoue (merci [@andsens]).
[@andsens] : https://stackoverflow.com/users/339505/andsens
Vous pouvez utiliser le code Python suivant. Contrairement à pip freeze
, ceci n'imprimera pas les avertissements et les erreurs FIXME.
Pour 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)
Pour 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)
Voici ma variante de la réponse de rbp, qui contourne les distributions " modifiables " et de développement. Elle partage deux défauts de l'originale : elle retélécharge et réinstalle inutilement ; et une erreur sur un paquet empêchera la mise à jour de tous les paquets suivants.
pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --
Rapports de bogue connexes, un peu décousus après la migration depuis bitbucket :