J'ai récemment rencontré un problème lors de l'utilisation pip
du -I
drapeau de que je voulais documenter quelque part:
-I
ne 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 package
fichiers s, ils utilisent import datetime
. Maintenant, dans package@2.0.0
, cela pointe vers le datetime
module de bibliothèque standard , mais dans package@3.0.0
, ils ont ajouté un local datetime.py
en 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.py
fichier ne sera pas supprimé, donc tout appel à import datetime
importera 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 -I
lors de la mise à jour des versions de package installées.
pip install MySQL_python==1.8.9