2011-03-03 3 views
118

Je cours Ubuntu 9:10 et un paquet appelé M2Crypto est installé (la version est 0.19.1). J'ai besoin de télécharger, construire et installer la dernière version du paquet M2Crypto (0.20.2).Comment mettre à jour un paquet Python?

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 désinstaller complètement la version 0.19.1 de mon système avant d'installer 0.20.2?

Répondre

30

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

+0

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

4

Comment le package a-t-il été installé à l'origine? Si elle était via apt, vous pourriez être en mesure de faire apt-get remove python-m2crypto

Si vous avez installé via easy_install, je suis sûr que la seule façon est trash juste les fichiers sous lib, partagé, etc ..

Ma recommandation dans le futur? Utilisez quelque chose comme pip pour installer vos paquets. En outre, vous pouvez rechercher quelque chose appelé virtualenv afin que vos paquets soient stockés par environnement, plutôt que seulement sur root.

Avec pépin, il est assez facile:

pip install m2crypto 

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

+0

La façon dont il décrit où les fichiers sont installés indique que le paquet a été installé en utilisant le gestionnaire apt - parce que (sur Debian AFAIK) apt installerait les paquets python sous les 2 emplacements qu'il a listés -/share/pyshared/.. code entre versions et/usr/lib/.. pour les parties spécifiques à la version. D'autre part, easy-install/pip utiliserait/usr/local/lib/.. - comme vous l'avez dit - juste apt-get remove l'aurait fait. –

265

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

sudo pip install [package_name] --upgrade 

sudo vous demandera d'entrer votre mot de passe root pour confirmer l'action. invite de commande, exécutez

+2

Et si vous utilisez un proxy sans authentification: sudo pip install [package] --upgrade --proxy = adresse: port – lmsasu

+10

Je suis venu ici pour cette réponse. J'ai essayé 'pip update' et' pip upgrade' et j'étais désespéré jusqu'à ce que j'ai vu '--upgrade' ici. Pourquoi n'ajoutent-ils pas une commande 'pip upgrade'? –

+3

C'est en effet une fonctionnalité bien cachée. – otocan

15
  1. Via fenêtres: pip list --outdated Vous obtiendrez la liste des paquets obsolètes.
  2. Exécuter: pip install [package] --upgrade Il va mettre à jour le [package] et désinstaller la version précédente.
27

Pour mettre à jour automatiquement tous les paquets obsolètes (qui ont été installés à l'aide pip), il suffit d'exécuter le soufflet de script,

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

Ici, pip list --outdated listera tous les sur emballages datés et nous conduit à awk, donc il imprimera seulement les noms. Ensuite, le $(...) en fera une variable et ensuite, tout est fait automatiquement. Assurez-vous d'avoir les permissions.(Il suffit de mettre sudo avant pip si vous êtes confus) Je voudrais écrire un script nommé, pip-upgrade Le code est ci-dessous,

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

Ensuite, utilisez les lignes de script suivant pour préparer:

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

Ensuite, appuyez simplement sur pip-upgrade et voilà!

+0

J'ai une erreur de syntaxe pointant sur la dernière parenthèse dans: 'awk: cmd. line: 1: {print $ 1}) ' –

+2

@TT Les nouvelles versions de' pip' nécessitent l'utilisation de l'option '--format = legacy', c'est-à-dire,' pip list --outdated --format = legacy'. Aussi FYI tout le monde: mise à jour aveugle de tous les modules via pip peut être assez dangereux sur de nombreuses distributions Linux. Beaucoup d'entre eux fournissent des modules python spécifiques via des distributions et certaines de ces distributions (RHEL en particulier) peuvent se casser si vous mettez à jour des shit ... sans compter que si vous effectuez une mise à jour via pip, les paquets de distributions peuvent annuler vos modifications une future mise à jour. – rsaw

2

Obtenez tous les paquets obsolètes et créer un fichier de commandes avec les commandes suivantes pip installer xxx --upgrade pour chaque paquets obsolètes

4

Je pense que le meilleur one-liner est:

pip install --upgrade <package>==<version> 
2

méthode 1: Mise à niveau manuellement un par un

pip installer package_name -U

méthode 2: U pgrade tout à la fois (rollback fort si un paquet échoue à mettre à jour

pip installer $ (pip list - outdated --format = colonnes | tail -n +3 | cut -d "" -f1) --upgrade

Méthode 3: Mise à niveau un par un en utilisant la boucle

for i in $ (liste pip --outdated --format = colonnes | tail -n 3 | cut -d »" f1); faire pip installer $ i --upgrade; terminé

Questions connexes