Question Mise à niveau de tous les paquets avec pip


Est-il possible de mettre à jour tous les paquets Python en même temps pip?

Notez qu'il y a une demande de fonctionnalité pour cela sur le tracker officiel.


1418
2018-04-27 09:23


origine


Réponses:


Il n'y a pas encore de drapeau intégré, mais vous pouvez utiliser

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

Remarque: il existe des variations potentielles infinies pour cela. J'essaie de garder cette réponse courte et simple, mais s'il vous plaît ne suggérer des variations dans les commentaires!

Modifications pertinentes:

  • Ajouté un grep ignorer les définitions de paquets "-e", comme suggéré par @jawache (Oui, vous pouvez remplacer grep+cut avec sed ou awk ou perl ou...).
  • Nouvelles versions de pip vous permet de lister les paquets obsolètes:

    pip list --outdated --format=freeze
    
  • Ajoutée -n1 à xargs, empêche d'arrêter tout si la mise à jour d'un paquet échoue (merci @andsens)


1660
2017-08-10 19:56



Vous pouvez utiliser le code Python suivant. contrairement à pip freeze, cela n'imprimera pas les avertissements et les erreurs FIXME.

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)

514
2018-04-30 03:31



Pour mettre à niveau tous les paquets locaux; tu pourrais utiliser pip-review:

$ pip install pip-review
$ pip-review --local --interactive

pip-review est une fourchette de pip-tools. Voir pip-tools problème mentionné par @knedlsepp. pip-review paquet fonctionne mais pip-tools le paquet ne fonctionne plus.

pip-review fonctionne sur Windows depuis la version 0.5.


501
2018-04-29 00:34



Fonctionne sur Windows. Devrait être bon pour les autres aussi. ($ est le répertoire dans lequel vous vous trouvez, dans l'invite de commande, par exemple C: / Users / Username>)

faire

$ pip freeze > requirements.txt

ouvrez le fichier texte, remplacez le == par> =

alors fais

$ pip install -r requirements.txt --upgrade

Si vous rencontrez un problème avec un certain paquet bloquant la mise à niveau (parfois, parfois), allez dans le répertoire ($), commentez le nom (ajoutez un # avant) et réexécutez la mise à jour. Vous pouvez ensuite décommenter cette section. Ceci est également idéal pour copier des environnements globaux python.

J'aime aussi la méthode pip-review:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

Vous pouvez sélectionner 'a' pour mettre à jour tous les paquets; Si une mise à niveau échoue, exécutez-la à nouveau et continuez à la suivante.


182
2017-11-12 09:20



Version Windows après consultation excellente Documentation pour FOR par Rob van der Woude

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i

87
2018-02-25 18:04



Vous pouvez simplement imprimer les paquets qui sont obsolètes

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

70
2018-06-10 12:50



Le one-liner suivant pourrait s'avérer utile:

pip list --format legacy --outdated | sed 's/(.*//g' | xargs -n1 pip install -U

xargs -n1 continue si une erreur se produit.

Si vous avez besoin d'un contrôle plus précis sur ce qui est omis et ce qui génère une erreur, vous ne devez pas ajouter -n1 flag et explicitement définir les erreurs à ignorer, en "canalisant" la ligne suivante pour chaque erreur séparée:

| sed 's/^<First characters of the error>.*//'

Voici un exemple de travail:

pip list --format legacy --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

57
2018-03-07 20:25



Cette option me semble plus directe et lisible:

pip install -U `pip list --outdated | awk '{ print $1}'`

(awk '{ print $1}' sélectionne le premier mot de la ligne (séparé par un espace))

Et cette version permet la suppression du message d'avertissement de pip list --outdated:

pip install -U `pip list --outdated | awk '!/Could not|ignored/ { print $1}'`

(awk '!/<pattern>/' supprime la ligne contenant un motif donné. Dans mon cas, les messages d'avertissement incluent "Could not" et "ignored" respectivement)

Cela pourrait également être utilisé pour s'attaquer à la prochaine par défaut columns format:

pip install -U `pip list --format=columns --outdated | awk '!/Package|---/{ print $1}'`

42
2017-11-21 23:15



Cela semble plus concis.

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

Explication:

pip list --outdated obtient des lignes comme celles-ci

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

Dans cut -d ' ' -f1, -d ' ' définit "espace" comme délimiteur, -f1signifie pour obtenir la première colonne.

Donc les lignes ci-dessus deviennent:

urllib3
wheel

puis passez-les à xargs pour exécuter la commande, pip install -U, avec chaque ligne en argument

-n1 limite le nombre d'arguments passés à chaque commande pip install -U être 1


32
2018-06-10 03:47



De https://github.com/cakebread/yolk :

$ pip install -U `yolk -U | awk '{print $1}' | uniq`

Cependant, vous devez d'abord obtenir le jaune:

$ sudo pip install -U yolk

26
2018-04-03 21:38