Comment mettre à jour un package Python?

234

J'utilise Ubuntu 9:10 et un package appelé M2Crypto est installé (la version est 0.19.1). Je dois télécharger, créer et installer la dernière version du package M2Crypto (0.20.2).

Le package 0.19.1 contient des fichiers dans un certain nombre d'emplacements, notamment (/ usr / share / pyshared et /usr/lib/pymodules.python2.6).

Comment puis-je désinstaller complètement la version 0.19.1 de mon système avant d'installer 0.20.2?

Thompson
la source

Réponses:

54

Vous voudrez peut-être examiner un gestionnaire de packages Python comme pip . Si vous ne souhaitez pas utiliser un gestionnaire de packages Python, vous devriez pouvoir télécharger M2Crypto et construire / compiler / installer sur l'ancienne installation.

Jeremy Whitlock
la source
1
Merci. Ce que vous avez dit a fonctionné. J'ai construit et installé 0.20.2 sans avoir besoin de désinstaller 0.19.1.
thompson
461

La meilleure façon que j'ai trouvée est d'exécuter cette commande à partir du terminal

sudo pip install [package_name] --upgrade

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


Remarque: certains utilisateurs peuvent avoir installé pip3 à la place. Dans ce cas, utilisez

sudo pip3 install [package_name] --upgrade
princelySid
la source
4
Et si vous utilisez un proxy sans authentification: sudo pip install [package] --upgrade --proxy = adresse: port
lmsasu
32
Je suis venu ici pour cette réponse. J'ai essayé pip updateet j'étais pip upgradedésespérée jusqu'à ce que je voie --upgradeici. Pourquoi n'ajoutent-ils pas une pip upgradecommande?
Lars Blumberg
9
C'est en effet une fonctionnalité bien cachée.
Otocan
1
Pour les utilisateurs de Windows: sudon'est pas requis.
Stevoisiak
2
Cela devrait être la réponse n ° 1
Cord Kaldemeyer
48

Pour mettre à niveau automatiquement tous les packages obsolètes (qui ont été installés à l'aide de pip), exécutez simplement le script ci-dessous,

pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Ici, pip list --outdatedlistera tous les paquets obsolètes, puis nous les dirigerons vers awk, il n'imprimera que les noms. Ensuite, le $(...)fera une variable et puis, tout se fait automatiquement. Assurez-vous que vous disposez des autorisations. (Mettez juste sudoavant pip si vous êtes confus) J'écrirais un script nommé, pip-upgrade Le code est ci-dessous,

#!/bin/bash
sudo pip install $(pip list --outdated | awk '{ print $1 }') --upgrade

Utilisez ensuite les lignes de script suivantes pour le préparer:

sudo chmod +x pip-upgrade
sudo cp pip-upgrade /usr/bin/

Ensuite, il suffit de frapper pip-upgradeet le tour est joué!

Fahim Ferdous
la source
j'ai une erreur de syntaxe pointant vers la dernière parenthèse dans:awk: cmd. line:1: { print $1 })
TT--
7
@TT Les versions plus récentes de pipvous obligent à utiliser l' --format=legacyoption, c'est-à-dire pip list --outdated --format=legacy. FYI également tout le monde: la mise à jour aveugle de tous les modules via pip peut être assez dangereuse sur de nombreuses distributions Linux. Beaucoup d'entre eux fournissent des modules python spécifiques via des packages de distribution et certaines de ces distributions (RHEL en particulier) peuvent se briser si vous mettez à jour merde ... sans parler du fait que si vous mettez à jour via pip, les packages de distribution peuvent annuler vos modifications sur une future mise à jour.
vu
merci @rsaw. Il a raison, vous devez exécuter vos commandes pip avec l'option --user
Fahim Ferdous
1
J'aime cette réponse, bien que je comprenne le danger de tout mettre à jour automatiquement. Quoi qu'il en soit, puisque l'héritage est déconseillé dans pip 19.0 pip install $ (pip list --outdated --format = columns | grep -v "Package" | grep -v - ---- | awk '{print $ 1}') - -upgrade
mike v
2
Afin de travailler sur un venv Ubuntu 18.04, adaptez-vous comme suit:pip install $(pip list --outdated | tail +3 | grep -v sdist | awk '{ print $1 }') --upgrade
Alexander Remesch
34
  1. Via l'invite de commande Windows, exécutez: pip list --outdated vous obtiendrez la liste des packages obsolètes.
  2. Exécuter: pip install [package] --upgrade il mettra à niveau [package]et désinstallera la version précédente.

Pour mettre à jour pip:

py -m pip install --upgrade pip

Encore une fois, cela désinstallera la version précédente de pip et installera la dernière version de pip.

Hossain Mahmood Tuhin
la source
29
  • Méthode 1: mettre à niveau manuellement un par un

pip install package_name -U
  • Méthode 2: mise à niveau tout à la fois (restauration à haut risque si certains packages ne parviennent pas à mettre à niveau

pip install $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1) --upgrade
  • Méthode 3: mise à niveau une par une en utilisant la boucle

for i in  $(pip list --outdated --format=columns |tail -n +3|cut -d" " -f1); do pip install $i --upgrade; done
Donghua Luo
la source
11

Je pense que le meilleur one-liner est:

pip install --upgrade <package>==<version>
Stuart Mclean
la source
9

Utilisez pipupgrade !

$ pip install pipupgrade
$ pipupgrade --latest --interactive

pipupgrade vous aide à mettre à niveau votre système, local ou packages à partir d'un requirements.txtfichier! Il met également à niveau de manière sélective des packages qui ne cassent pas le changement. Compatible avec Python2.7 +, Python3.4 + et pip9 +, pip10 +, pip18 +.

entrez la description de l'image ici

REMARQUE: je suis l'auteur de l'outil.

Achilles Gasper Rasquinha
la source
1
Chaque fois que j'utilise cet outil, j'obtiens la réponse "[0; 93mChecking ... [0m" et il continue de ne rien faire. Est-ce que je l'utilise mal?
Violatique
J'utilise un Mac avec MacPorts. Avec Python 3.7, pipupgrade ne fonctionnait que pour 5 des 50 packages, pour le reste j'ai dû utiliser ceci: pour i dans pip3.7 list --outdated | sed -n -e '3,$s/ .*//p'; faire pip3.7 installer --upgrade $ i; fait
Michael Dreher
4

Comment le package a-t-il été installé à l'origine? Si c'était via apt, vous pourriez simplement faireapt-get remove python-m2crypto

Si vous l'avez installé via easy_install, je suis sûr que la seule façon est de simplement jeter les fichiers sous lib, shared, etc.

Ma recommandation à l'avenir? Utilisez quelque chose comme pip pour installer vos packages. De plus, vous pouvez rechercher quelque chose appelé virtualenv afin que vos packages soient stockés par environnement, plutôt que uniquement sur root.

Avec pip, c'est assez simple:

pip install m2crypto

Mais vous pouvez également installer à partir de git, svn, etc repos avec la bonne adresse. Tout cela est expliqué dans la documentation de pip

Bartek
la source
La façon dont il décrit où les fichiers sont installés indique que le paquet a été installé à l'aide du gestionnaire de paquets apt - parce que (sur Debian AFAIK) apt installerait des paquets python sous les 2 emplacements qu'il a répertoriés - / share / pyshared / .. est pour le code partagé à travers les versions et / usr / lib / .. pour les parties spécifiques à la version. easy-install / pip d'autre part utiliserait / usr / local / lib / .. - donc comme vous l'avez dit - juste apt-get remove l'aurait fait.
Basel Shishani
3

Dans le cahier Juptyer, un moyen très simple est

!pip install <package_name> --upgrade

Il vous suffit donc de le remplacer par le nom réel du package.

Joe Zeng
la source
2

Obtenez tous les packages obsolètes et créez un fichier de commandes avec les commandes suivantes pip install xxx --upgrade pour chaque package obsolète

Leslie Lespes
la source