Ich bin kürzlich auf ein Problem bei der Verwendung von pip
's gestoßen-I
- Flag , dass ich Dokument irgendwo wollte:
-I
wird 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 package
Dateien verwenden sie import datetime
. In package@2.0.0
verweist dies nun auf das Standardbibliotheksmodul datetime
, in package@3.0.0
wurde jedoch ein lokaler datetime.py
als 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.py
Datei nicht entfernt, sodass bei jedem Aufruf von import datetime
das 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 -I
beim Aktualisieren installierter Paketversionen vorzuziehen ist .
pip install MySQL_python==1.8.9