J'ai récemment rencontré un problème en utilisant pip
's -I
drapeau que je voulais documenter quelque part :
-I
se pas désinstaller le paquetage existant avant de continuer ; il sera simplement installé par-dessus l'ancien. Cela signifie que tous les fichiers qui devraient être supprimés entre les versions seront laissés en place. Cela peut provoquer un comportement étrange si ces fichiers partagent des noms avec d'autres modules installés.
Par exemple, disons qu'il y a un paquet nommé package
. Dans l'un des package
ils utilisent import datetime
. Maintenant, en package@2.0.0
ce qui pointe vers la bibliothèque standard datetime
mais dans package@3.0.0
ils ont ajouté un local datetime.py
en remplacement de la version de la bibliothèque standard (pour une raison quelconque).
Maintenant, disons que j'exécute pip install package==3.0.0
mais je me suis rendu compte plus tard que je voulais en fait la version 2.0.0
. Si je lance maintenant pip install -I package==2.0.0
, l'ancien datetime.py
ne sera pas supprimé, de sorte que tous les appels à import datetime
importera le mauvais module.
Dans mon cas, cela s'est manifesté par des erreurs de syntaxe étranges parce que la version la plus récente du paquet a ajouté un fichier qui n'était compatible qu'avec Python 3, et lorsque j'ai rétrogradé les versions du paquet pour supporter Python 2, j'ai continué à importer le module exclusivement Python 3.
Sur cette base, je dirais que la désinstallation de l'ancien paquet est toujours préférable à l'utilisation de l'option -I
lors de la mise à jour des versions des paquets installés.
23 votes
Merci pour l'astuce, cela a fonctionné pour moi pour installer une ancienne version d'openpyxl via
pip install MySQL_python==1.8.9
4 votes
Oui, cela a également fonctionné pour les pandas, merci :
pip install -Iv pandas==0.12.0
1 votes
A également fonctionné pour moi : pip install xvfbwrapper==0.2.4