Comment mettre à jour / mettre à jour un package à l'aide de pip?

171

Comment mettre à jour un package à l'aide de pip? ceux-ci ne fonctionnent pas:

pip update
pip upgrade

Je sais que c'est une question simple mais elle est nécessaire car elle n'est pas si facile à trouver (la documentation pip ne s'affiche pas et les autres questions du débordement de pile sont pertinentes mais ne sont pas exactement à ce sujet)

borgr
la source

Réponses:

280

Le chemin est

sudo pip install [package_name] --upgrade

ou en bref

sudo pip install [package_name] -U

sudo vous demandera d'entrer votre mot de passe root pour confirmer l'action.

Si vous n'avez pas de mot de passe root (si vous n'êtes pas l'administrateur), vous devriez probablement travailler avec virtualenv , puis vous devriez supprimer le sudo:

pip install [package_name] --upgrade
borgr
la source
2
Comme pip install --helpdit: -U, --upgrade Upgrade all specified packages to the newest available version.. Ce devrait donc être la majuscule -U, non -u.
Peter Liang
25
Pourquoi une option aussi courante n'est pas montrée lorsque vous le faites pip --helpest une énigme pour moi ...
Husky
3
@Husky - Oui, dans le même esprit, pourquoi ils ne font pas simplement une upgradecommande qui fait ce que vous voyez dans la réponse est une bonne question. (Ce qui signifie que si vous utilisez 'upgrade', il fait simplement ce que install+ --upgradefait.) Un 'alias' en quelque sorte.
bshea
10

Pour un package non spécifique et une solution plus générale, vous pouvez consulter pip-review , un outil qui vérifie quels packages pourraient / devraient être mis à jour.

$ pip-review --interactive
requests==0.14.0 is available (you have 0.13.2)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit y
comme si
la source
3
Bien que cela ne réponde pas directement à la question, c'est peut-être ce que certaines personnes recherchent réellement lorsqu'elles recherchent ce message.
borgr
8

tl; dr script pour mettre à jour tous les packages installés

Si vous ne souhaitez mettre à niveau qu'un seul paquet, reportez-vous à la réponse de @ borgr . Je trouve souvent nécessaire, ou du moins agréable, de mettre à jour tous mes paquets en même temps. Actuellement, pip ne prend pas en charge nativement cette action, mais avec les scripts sh, c'est assez simple. Vous utilisez pip list, awk(ou cutet tail) et la substitution de commande. Mon one-liner normal est:

for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

Cela demandera le mot de passe root. Si vous n'y avez pas accès, l' --useroption pipou virtualenv peut être quelque chose à examiner.

Aiden Woodruff
la source
7
import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

Enregistrer sous xx.py
Puis exécutez Python3 xx.py
Environnement: python3.5 + pip10.0 +

Fofdsf
la source
J'aime cette solution. J'ai ajouté une impression pour afficher le nom du package lors de la mise à jour:print('updating ', pkg['name'])
pvoj
4

Pour mettre à niveau pip pour Python3.4 +, vous devez utiliser pip3 comme suit:

sudo pip3 install pip --upgrade

Cela mettra à jour le pip situé à: /usr/local/lib/python3.X/dist-packages

Sinon, pour mettre à niveau pip pour Python2.7, vous utiliseriez pip comme suit:

sudo pip install pip --upgrade

Cela mettra à jour le pip situé à l'adresse: /usr/local/lib/python2.7/dist-packages

Nick D
la source
7
Ce n'est pas ce que le PO a demandé. Il demande comment mettre à niveau un package spécifique, pas le PIP lui-même.
délimité le
néanmoins, il semble utile d'avoir ici parmi ces autres réponses
euh