Installation de versions de packages spécifiques avec pip

1314

J'essaie d'installer la version 1.2.2 de l'adaptateur MySQL_python, en utilisant un nouveau virtualenv créé avec l' --no-site-packagesoption. La version actuelle affichée dans PyPi est 1.2.3 . Existe-t-il un moyen d'installer l'ancienne version? J'ai trouvé un article indiquant que cela devrait le faire:

pip install MySQL_python==1.2.2

Une fois installé, cependant, il apparaît toujours MySQL_python-1.2.3-py2.6.egg-infodans les packages du site. Est-ce un problème spécifique à ce package ou est-ce que je fais quelque chose de mal?

Joe
la source
17
Merci pour l'astuce, cela a fonctionné pour moi d'installer une ancienne version de openpyxl viapip install MySQL_python==1.8.9
tim
4
Oui, cela a également fonctionné pour les pandas, merci:pip install -Iv pandas==0.12.0
tandy
1
a également fonctionné pour moi: pip install xvfbwrapper == 0.2.4
amitdatta

Réponses:

895

TL; DR:

  • pip install -Iv(ie pip install -Iv MySQL_python==1.2.2)

Premièrement, je vois deux problèmes avec ce que vous essayez de faire. Puisque vous avez déjà une version installée, vous devez soit désinstaller le pilote existant ou utiliserpip install -I MySQL_python==1.2.2

Cependant, vous découvrirez bientôt que cela ne fonctionne pas. Si vous regardez le journal d'installation de pip, ou si vous le faites, pip install -Iv MySQL_python==1.2.2vous constaterez que le lien URL PyPI ne fonctionne pas pour MySQL_python v1.2.2. Vous pouvez le vérifier ici: http://pypi.python.org/pypi/MySQL-python/1.2.2

Le lien de téléchargement 404 et les liens URL de secours sont redirigés à l'infini en raison de la récente mise à niveau de sourceforge.net et de l'URL périmée de PyPI.

Donc, pour installer correctement le pilote, vous pouvez suivre ces étapes:

pip uninstall MySQL_python
pip install -Iv http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download
Mahmoud Abdelkader
la source
1
Cependant, il ne devrait pas y avoir de problème avec plusieurs versions, c'est le point de créer de nouveaux dossiers pour chaque version et d'utiliser des fichiers .pth.
Jochen Ritzel
3
Cela installe la bonne version, de même que la réponse à cette question - merci pour votre aide. Frapper un problème différent maintenant: "erreur: la commande '/usr/bin/gcc-4.2' a échoué avec l'état de sortie 1" lors de la construction de l'extension '_mysql'. Je sais que j'ai GCC et l'installation de MySQL_python 1.2.3 se passe bien. D'autres ont-ils vu ce problème, en particulier avec 1.2.2?
Joe
Posez une autre question s'il vous plaît et postez le message d'erreur que vous recevez de pip.
Mahmoud Abdelkader
2
Bien sûr - voici le lien: stackoverflow.com/questions/5226945/…
Joe
4
Curieux de savoir pourquoi vous utilisez l'option -I si nous avons déjà supprimé l'installation existante - pourriez-vous donner des détails à ce sujet?
Joe
509

Vous pouvez même utiliser une plage de versions avec la pip installcommande. Quelque chose comme ça:

pip install 'stevedore>=1.3.0,<1.4.0'

Et si le package est déjà installé et que vous souhaitez le rétrograder, ajoutez --force-reinstallcomme ceci:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
user1978556
la source
129
par exemple: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank
1
parfait! exécuté sur Ubunto 15.04 et il a (automatiquement) remplacé une bibliothèque existante par la version spécifiée. Résolu tous mes problèmes!
zevij
2
Je vais juste mentionner que pour Python 2, j'ai dû utiliser des guillemets doubles "au lieu de '
Prime_Aqasix
6
@ HandofC'thuhlu je pense que nous devons utiliser des guillemets doubles pour Windows et non python 2
SmartManoj
3
Utilisez des guillemets doubles sous Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng
139

Une façon, comme suggéré dans cet article , est de mentionner la version en piptant que:

pip install -Iv MySQL_python==1.2.2

ie utiliser ==et mentionner le numéro de version pour installer uniquement cette version. -I, --ignore-installedignore les packages déjà installés.

Srikar Appalaraju
la source
1
Il faut se méfier! J'ai eu l'expérience que cela installait les différentes versions côte à côte ! Fait intéressant également, pip listn'était pas au courant de cela, mais l' conda listétait (et afficherait les différentes versions du package). Cela a également complètement dérouté Pycharm .
Lionel Trebuchon
66

Pour installer une version de package python spécifique, que ce soit la première fois, une mise à niveau ou une rétrogradation, utilisez:

pip install --force-reinstall MySQL_python==1.2.4

La version 1.2.2 de MySQL_python n'est pas disponible, j'ai donc utilisé une version différente. Pour afficher toutes les versions de package disponibles à partir d'un index, excluez la version:

pip install MySQL_python==
Zach Weg
la source
4
Avec pip 10.0.1, c'est la seule solution de travail. L'option "-I" réinstalle réellement la version précédente.
FedFranzoni
38

Je crois que si vous avez déjà installé un paquet, pip ne le remplacera pas par une autre version. Utilisez -Ipour ignorer les versions précédentes.

dappawit
la source
1
Je ne l'ai pas installé - en utilisant un nouveau virtualenv créé avec l'option --no-site-packages
Joe
2
ok, donc vous demandez la version 1.2.2 et il installe toujours 1.2.3, et rien d'autre n'a été installé? La syntaxe que vous avez utilisée est correcte pour obtenir des versions spécifiques.
dappawit
"en utilisant un nouveau virtualenv créé avec l'option --no-site-packages"; vous devrez peut-être faire précéder cela avec la commande unset PYTHONPATHafin de ne pas pipvoir vos bibliothèques préinstallées
user5359531
17

Parfois, la version précédemment installée est mise en cache.

~$ pip install pillow==5.2.0

Il renvoie les éléments suivants:
Exigence déjà satisfaite: oreiller == 5.2.0 dans /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Nous pouvons utiliser --no-cache-dir avec -I pour remplacer ceci

~$ pip install --no-cache-dir -I pillow==5.2.0
Jack Chan
la source
5

Comme cela semblait être un changement de rupture introduit dans la version 10 de pip, j'ai rétrogradé vers une version compatible:

pip install 'pip<10' 

Cette commande indique à pip d'installer une version du module inférieure à la version 10. Faites-le dans un virutalenv afin de ne pas bousiller l'installation de Python sur votre site.

Trenton
la source
5

J'ai récemment rencontré un problème lors de l'utilisation pipdu -Idrapeau de que je voulais documenter quelque part:

-Ine pas désinstaller le package existant avant de poursuivre; il suffit de l'installer sur l'ancien. Cela signifie que tous les fichiers qui devraient être supprimés entre les versions seront à la place laissés en place. Cela peut provoquer un comportement étrange si ces fichiers partagent des noms avec d'autres modules installés.

Par exemple, supposons qu'il existe un package nommé package. Dans l'un des packagefichiers s, ils utilisent import datetime. Maintenant, dans [email protected], cela pointe vers le datetimemodule de bibliothèque standard , mais dans [email protected], ils ont ajouté un local datetime.pyen remplacement de la version de bibliothèque standard (pour une raison quelconque).

Disons maintenant que je cours pip install package==3.0.0, mais réalisez plus tard que je voulais vraiment une version 2.0.0. Si je lance maintenant pip install -I package==2.0.0, l'ancien datetime.pyfichier ne sera pas supprimé, donc tout appel à import datetimeimportera le mauvais module.

Dans mon cas, cela s'est manifesté par d'étranges erreurs de syntaxe car la nouvelle version du package a ajouté un fichier qui n'était compatible qu'avec Python 3, et lorsque j'ai rétrogradé les versions du package pour prendre en charge Python 2, j'ai continué d'importer le module Python-3 uniquement.

Sur cette base, je dirais que la désinstallation de l'ancien package est toujours préférable à l'utilisation -Ilors de la mise à jour des versions de package installées.

0x5453
la source
3

Cette commande ci-dessous a fonctionné pour moi

Version Python - 2.7

paquet - python-jenkins

commande - $ pip install 'python-jenkins>=1.1.1'

Tapan Hegde
la source
Cher votant, Veuillez justifier pourquoi cette réponse a été rejetée?
Tapan Hegde
Je n'ai pas déçu, mais je peux voir que cela ne répond pas à la question et ne fournit aucune information utile que le PO peut utiliser pour résoudre le problème.
TheAmigo
0

Il y a 2 façons d'installer n'importe quel paquet avec la version: - A). pip install -Iv nom-package == version B). pip install -v nom-package == version

Pour un

Ici, si vous utilisez l'option -I lors de l'installation (lorsque vous ne savez pas si le package est déjà installé) (comme 'pip install -Iv pyreadline == 2. *' ou quelque chose), vous installeriez un nouveau package séparé avec le même package existant ayant une version différente.

Pour B

  1. Au début, vous voudrez peut-être vérifier l'absence d'exigences non respectées. vérification de pip

2. puis voyez ce qui est déjà installé par la liste pip

3.si la liste des packages contient un package que vous souhaitez installer avec une version spécifique, la meilleure option consiste à désinstaller le package de cette version en premier, en pipinstall package-name

4.Et maintenant vous pouvez réinstaller le même package avec une version spécifique, par pip install -v nom-package == version par exemple pip install -v pyreadline == 2. *

Samarth
la source
0

Si vous souhaitez mettre à jour vers la dernière version et que vous ne savez pas quelle est la dernière version que vous pouvez taper.

pip installer MySQL_python --upgrade

Cela mettra à jour MySQL_python pour la dernière version disponible, vous pouvez l'utiliser pour n'importe quelle autre version de package.

DilMac
la source