web-dev-qa-db-fra.com

Installation de versions de paquetages spécifiques avec pip

J'essaie d'installer la version 1.2.2 de l'adaptateur MySQL_python à l'aide d'un nouveau fichier virtualenv créé avec l'option --no-site-packages. La version actuelle montrée dans PyPi est 1.2.3 . Est-il possible 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é, il affiche toujours MySQL_python-1.2.3-py2.6.Egg-info dans les packages du site. Est-ce un problème spécifique à ce paquet ou est-ce que je fais quelque chose de mal?

980
Joe

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 désinstaller le pilote existant ou utiliser pip install -I MySQL_python==1.2.2.

Cependant, vous découvrirez bientôt que cela ne fonctionne pas. Si vous consultez le journal d'installation de pip ou si vous effectuez un pip install -Iv MySQL_python==1.2.2, vous 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 d'URL de secours sont redirigés indéfiniment en raison de la mise à jour récente de sourceforge.net et de l'URL obsolète 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
700

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

pip install 'stevedore>=1.3.0,<1.4.0'

Et si le paquet est déjà installé et que vous voulez le rétrograder, ajoutez --force-reinstall comme ceci:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
354
user1978556

L’une des façons suggérées dans cet article est de mentionner la version dans pip comme 

pip install -Iv MySQL_python==1.2.2

utilisez == et mentionnez le numéro de version pour installer uniquement cette version. -I, --ignore-installed ignore les packages déjà installés.

106

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

MySQL_python version 1.2.2 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==
43
Zach Weg

Je pense que si vous avez déjà installé un paquet, pip ne l'écrasera pas avec une autre version. Utilisez -I pour ignorer les versions précédentes.

35
dappawit

Comme cela semblait être un changement radical introduit dans la version 10 de pip, je suis passé à une version compatible:

pip install 'pip<10' 

Cette commande indique à pip d'installer une version du module inférieure à la version 10. Procédez de cette manière dans un virutalenv afin de ne pas gâcher l'installation de votre site avec Python.

3
Trenton

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

~$ pip install pillow==5.2.0

Il retourne les suivants:
Condition déjà satisfaite: pillow == 5.2.0 dans /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Nous pouvons utiliser --no-cache-dir avec -I pour écraser ceci

~$ pip install --no-cache-dir -I pillow==5.2.0
2
Jack Chan

J'ai récemment rencontré un problème lorsque j'utilisais l'indicateur -I de pip que je voulais documenter quelque part:

-I va pas désinstaller le paquet existant avant de continuer; il va simplement l'installer sur l'ancien. Cela signifie que tous les fichiers devant être supprimés entre les versions resteront à la place. Cela peut entraîner un comportement étrange si ces fichiers partagent des noms avec d'autres modules installés.

Par exemple, supposons qu'il existe un paquet nommé package. Dans l’un des fichiers packages, ils utilisent import datetime. Désormais, dans [email protected], cela pointe sur le module datetime de la bibliothèque standard, mais dans [email protected], ils ont ajouté un datetime.py local en remplacement de la version de la bibliothèque standard (quelle qu'en soit la raison). 

Maintenant, disons que je lance pip install package==3.0.0, mais que je réalise plus tard que je voulais réellement la version 2.0.0. Si je lance maintenant pip install -I package==2.0.0, l'ancien fichier datetime.py ne sera pas supprimé. Par conséquent, tout appel à import datetime importera le mauvais module.

Dans mon cas, cela se traduisait par des erreurs de syntaxe étranges car la version la plus récente du package ajoutait un fichier compatible uniquement avec Python 3. Lorsque j'ai abaissé les versions de package pour prendre en charge Python 2, j'ai poursuivi l'importation du module Python-3.

Sur cette base, je dirais que désinstaller l'ancien paquet est toujours préférable à utiliser -I lors de la mise à jour des versions de paquet installées.

0
0x5453