Ich bin kürzlich auf ein Problem bei der Verwendung von pip's gestoßen-I - Flag , dass ich Dokument irgendwo wollte:
-Iwird nicht das vorhandene Paket deinstallieren, bevor Sie fortfahren; es wird nur auf dem alten installiert. Dies bedeutet, dass alle Dateien, die zwischen den Versionen gelöscht werden sollen, stattdessen an Ort und Stelle bleiben. Dies kann zu seltsamem Verhalten führen, wenn diese Dateien Namen mit anderen installierten Modulen teilen.
Nehmen wir zum Beispiel an, es gibt ein Paket mit dem Namen package. In einer der packageDateien verwenden sie import datetime. In package@2.0.0verweist dies nun auf das Standardbibliotheksmodul datetime, in package@3.0.0wurde jedoch ein lokaler datetime.pyals Ersatz für die Standardbibliotheksversion hinzugefügt (aus welchem Grund auch immer).
Nehmen wir jetzt an, ich renne pip install package==3.0.0, merke aber später, dass ich tatsächlich eine Version haben wollte 2.0.0. Wenn ich jetzt starte pip install -I package==2.0.0, wird die alte datetime.pyDatei nicht entfernt, sodass bei jedem Aufruf von import datetimedas falsche Modul importiert wird.
In meinem Fall manifestierte sich dies mit seltsamen Syntaxfehlern, da die neuere Version des Pakets eine Datei hinzufügte, die nur mit Python 3 kompatibel war, und als ich Paketversionen auf Python 2 herunterstufte, importierte ich das Nur-Python-3-Modul weiter.
Auf dieser Grundlage würde ich argumentieren, dass die Deinstallation des alten Pakets immer der Verwendung -Ibeim Aktualisieren installierter Paketversionen vorzuziehen ist .
pip install MySQL_python==1.8.9