Installieren bestimmter Paketversionen mit pip

1314

Ich versuche, Version 1.2.2 des MySQL_python-Adapters mit einer neuen virtuellen Umgebung zu installieren, die mit der --no-site-packagesOption erstellt wurde. Die aktuelle Version in PyPi ist 1.2.3 . Gibt es eine Möglichkeit, die ältere Version zu installieren? Ich habe einen Artikel gefunden, der besagt, dass dies der Fall sein sollte:

pip install MySQL_python==1.2.2

Bei der Installation wird es jedoch weiterhin MySQL_python-1.2.3-py2.6.egg-infoin den Site-Paketen angezeigt. Ist dies ein spezifisches Problem für dieses Paket oder mache ich etwas falsch?

Joe
quelle
17
Vielen Dank für den Hinweis, dies funktionierte für mich, um eine ältere Version von openpyxl überpip install MySQL_python==1.8.9
tim
4
Ja, das hat auch bei Pandas funktioniert, danke:pip install -Iv pandas==0.12.0
Tandy
1
hat auch für mich funktioniert: pip install xvfbwrapper == 0.2.4
amitdatta

Antworten:

895

TL; DR:

  • pip install -Iv(dh pip install -Iv MySQL_python==1.2.2)

Erstens sehe ich zwei Probleme mit dem, was Sie versuchen zu tun. Da Sie bereits eine installierte Version haben, sollten Sie entweder den aktuell vorhandenen Treiber deinstallieren oder verwendenpip install -I MySQL_python==1.2.2

Sie werden jedoch bald feststellen, dass dies nicht funktioniert. Wenn Sie sich das Installationsprotokoll von pip ansehen oder ein Protokoll pip install -Iv MySQL_python==1.2.2erstellen, werden Sie feststellen, dass der PyPI-URL-Link für MySQL_python v1.2.2 nicht funktioniert. Sie können dies hier überprüfen: http://pypi.python.org/pypi/MySQL-python/1.2.2

Der Download-Link 404s und die Fallback-URL-Links werden aufgrund des jüngsten Upgrades von sourceforge.net und der veralteten URL von PyPI unendlich umgeleitet.

Um den Treiber ordnungsgemäß zu installieren, können Sie die folgenden Schritte ausführen:

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
Mahmoud Abdelkader
quelle
1
Es sollte jedoch kein Problem geben, mehrere Versionen zu haben. Daher müssen für jede Version neue Ordner erstellt und .pth-Dateien verwendet werden.
Jochen Ritzel
3
Dadurch wird die richtige Version installiert, ebenso wie die Antwort auf diese Frage - danke für Ihre Hilfe. Treffen Sie jetzt ein anderes Problem: "Fehler: Befehl '/usr/bin/gcc-4.2' mit Exit-Status 1 fehlgeschlagen" beim Erstellen der Erweiterung '_mysql'. Ich weiß, dass ich GCC habe und die Installation für MySQL_python 1.2.3 reibungslos verläuft. Haben andere dieses Problem gesehen, insbesondere mit 1.2.2?
Joe
Stellen Sie bitte eine weitere Frage und senden Sie die Fehlermeldung, die Sie von pip erhalten.
Mahmoud Abdelkader
2
Sicher - hier ist der Link: stackoverflow.com/questions/5226945/…
Joe
4
Neugierig, warum Sie die Option -I verwenden, wenn wir die vorhandene Installation bereits entfernt haben - können Sie dazu einige Details angeben?
Joe
509

Sie können sogar einen Versionsbereich mit pip installBefehl verwenden. Etwas wie das:

pip install 'stevedore>=1.3.0,<1.4.0'

Und wenn das Paket bereits installiert ist und Sie ein Downgrade durchführen möchten, fügen Sie Folgendes hinzu --force-reinstall:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
user1978556
quelle
129
Zum Beispiel: $ pip install 'xkcdpass==1.2.5' --force-reinstall
Jschank
1
perfekt! lief unter Ubunto 15.04 und ersetzte (automatisch) eine vorhandene Bibliothek durch die angegebene Version. Alle meine Probleme gelöst!
Zevij
2
Ich
möchte nur
6
@ HandofC'thuhlu Ich denke, wir müssen doppelte Anführungszeichen für Windows und nicht Python 2 verwenden
SmartManoj
3
Verwenden Sie doppelte Anführungszeichen unter Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng
139

Eine Möglichkeit, wie in diesem Beitrag vorgeschlagen , besteht darin, die Version pipwie folgt zu erwähnen :

pip install -Iv MySQL_python==1.2.2

dh Verwenden ==und erwähnen Sie die Versionsnummer, um nur diese Version zu installieren. -I, --ignore-installedignoriert bereits installierte Pakete.

Srikar Appalaraju
quelle
1
In acht nehmen! Ich hatte die Erfahrung, dass dadurch die verschiedenen Versionen nebeneinander installiert wurden ! Interessanterweise pip listwar sich das auch nicht bewusst, war es aber conda list(und würde die verschiedenen Paketversionen anzeigen). Es verwirrte Pycharm auch völlig .
Lionel Trebuchon
66

So installieren Sie eine bestimmte Python-Paketversion, unabhängig davon, ob es sich um das erste Mal, ein Upgrade oder ein Downgrade handelt:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python Version 1.2.2 ist nicht verfügbar, daher habe ich eine andere Version verwendet. Um alle verfügbaren Paketversionen aus einem Index anzuzeigen, schließen Sie die Version aus:

pip install MySQL_python==
Zach Weg
quelle
4
Mit pip 10.0.1 ist dies die einzige funktionierende Lösung. Die Option "-I" installiert die vorherige Version tatsächlich neu.
FedFranzoni
38

Ich glaube, wenn Sie bereits ein Paket installiert haben, wird pip es nicht mit einer anderen Version überschreiben. Verwenden Sie -Idiese Option, um frühere Versionen zu ignorieren.

dappawit
quelle
1
Ich habe es nicht installiert - unter Verwendung einer neuen virtuellen Umgebung, die mit der Option --no-site-packages erstellt wurde
Joe
2
Okay, Sie fragen nach Version 1.2.2 und es wird immer noch 1.2.3 installiert, und es wurde nichts anderes installiert? Die von Ihnen verwendete Syntax ist korrekt, um bestimmte Versionen abzurufen.
Dappawit
"Verwenden einer neuen virtuellen Umgebung, die mit der Option --no-site-packages erstellt wurde"; Sie benötigen diese mit dem Befehl vorangestellt werden, unset PYTHONPATHum zu halten , nicht pipsehen Ihre vorinstallierte Bibliotheken
user5359531
17

Manchmal wird die zuvor installierte Version zwischengespeichert.

~$ pip install pillow==5.2.0

Es gibt Folgendes zurück:
Anforderung bereits erfüllt: pillow == 5.2.0 in /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Wir können --no-cache-dir zusammen mit -I verwenden, um dies zu überschreiben

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

Da dies eine bahnbrechende Änderung zu sein schien, die in Version 10 von pip eingeführt wurde, habe ich ein Downgrade auf eine kompatible Version durchgeführt:

pip install 'pip<10' 

Dieser Befehl weist pip an, eine Version des Moduls zu installieren, die niedriger als Version 10 ist. Führen Sie dies in einem virutalenv aus, damit Sie Ihre Site-Installation von Python nicht vermasseln .

Trenton
quelle
5

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 [email protected]verweist dies nun auf das Standardbibliotheksmodul datetime, in [email protected]wurde 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 .

0x5453
quelle
3

Dieser Befehl unten hat bei mir funktioniert

Python-Version - 2.7

Paket - Python-Jenkins

Befehl - $ pip install 'python-jenkins>=1.1.1'

Tapan Hegde
quelle
Sehr geehrter Downvoter, bitte begründen Sie, warum diese Antwort abgelehnt wurde.
Tapan Hegde
Ich habe nicht abgelehnt, kann aber feststellen, dass dies weder die Frage beantwortet noch hilfreiche Informationen liefert, die das OP zur Lösung des Problems verwenden kann.
TheAmigo
0

Es gibt zwei Möglichkeiten, wie Sie ein Paket mit Version installieren können: - A). pip install -Iv Paketname == Version B). pip install -v Paketname == Version

Für ein

Wenn Sie während der Installation die Option -I verwenden (wenn Sie nicht wissen, ob das Paket bereits installiert ist) (z. B. 'pip install -Iv pyreadline == 2. *' oder so), installieren Sie ein neues separates Paket mit demselben vorhandenen Paket mit einer anderen Version.

Für B.

  1. Zunächst möchten Sie möglicherweise überprüfen, ob keine fehlerhaften Anforderungen vorliegen. Pip Check

2.und dann sehen, was bereits von der Pip-Liste installiert wurde

3.Wenn die Liste der Pakete ein Paket enthält, das Sie mit einer bestimmten Version installieren möchten, ist es besser, zuerst das Paket dieser Version zu deinstallieren, indem Sie den Paketnamen pip deinstallieren

4.Und jetzt können Sie das gleiche Paket mit einer bestimmten Version neu installieren , indem Sie -v Paketname == Version installieren, z. B. pip installieren -v pyreadline == 2. *

Samarth
quelle
0

Wenn Sie auf die neueste Version aktualisieren möchten und nicht wissen, welche Version die neueste ist, können Sie sie eingeben.

pip install MySQL_python --upgrade

Dadurch wird MySQL_python auf die neueste verfügbare Version aktualisiert, die Sie für jede andere Paketversion verwenden können.

DilMac
quelle