wake-up-neo.com

Warum installiert pip eine alte Version meines Pakets?

Ich habe gerade eine neue Version meines Pakets auf PyPi (1.2.1.0-r4) hochgeladen: Ich kann die Egg-Datei herunterladen und sie mit easy_install installieren, und die Version wird korrekt geprüft. Wenn ich jedoch mit pip installiere, wird stattdessen Version 1.1.0.0 installiert. Selbst wenn ich die Version explizit mit pip install -Iv tome==1.2.1.0-r4 spezifiziere, erhalte ich folgende Meldung: Requested tome==1.2.1.0-r4, but installing version 1.1.0.0, verstehe aber nicht warum.

Ich habe zweimal mit parse_version überprüft und bestätigt, dass die Versionszeichenfolge in 1.2.1 größer als die in 1.1.0 ist.

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

Also, eine Idee, warum es stattdessen 1.1.0 wählt?

62
brianmearns

Dies ist eine ausgezeichnete Frage. Ich habe ewig gebraucht, um es herauszufinden. Dies ist die Lösung, die für mich funktioniert:

Wenn pip eine lokale Version des Pakets finden kann, zieht pip anscheinend die lokale Version der Remote-Version vor. Ich habe sogar meinen Computer vom Internet getrennt und es erneut versucht - als pip das Paket noch erfolgreich installiert hat und sich nicht einmal beschwert hat, war die Quelle offensichtlich lokal. 

Der wirklich verwirrende Teil war in meinem Fall, dass pip die neueren Versionen auf pypi gefunden hat, sie meldete und dann die ältere Version ohnehin neu installierte ... arggh. Außerdem sagte es mir nicht, was es tat und warum.

Wie habe ich dieses Problem gelöst?

Sie können pip dazu bringen, eine ausführliche Ausgabe mit dem -v-Flag zu geben ... aber eine ist nicht genug. Ich habe die Hilfe RTFM -ed gemacht, die besagt, dass Sie -v mehrmals tun können (bis zu 3x), um ausführlichere Ausgaben zu erhalten. So tat ich:

pip install -v -v -v <my_package>

Dann habe ich die Ausgabe durchgesehen. Eine Zeile fiel mir auf:

Die Quelle in/tmp/pip-build-root/hat die Version 0.0.11, die die Anforderung <mein_Paket> erfüllt

Ich habe dieses Verzeichnis gelöscht, woraufhin pip die neueste Version von pypi installierte.

78
Matt Fenwick

Dank Marcus Smith , der erstaunliche Arbeit als Pip-Instandhalter leistet, wurde dies in Version 1.4 von pip behoben, die am 23.07.2013 veröffentlicht wurde.

Relevante Informationen aus dem changelog für diese Version

Behebung einer Reihe von Problemen (# 413, # 709, # 634, # 602 und # 939) im Zusammenhang mit Build-Verzeichnisse bereinigen und nicht wiederverwenden. (Ziehen Sie # 865, # 948)

23
Piotr Dobrogost

Versuchen Sie, das Paket erneut mit folgendem Befehl herunterzuladen:

pip install --no-cache-dir --upgrade <package>
22
Iacchus

Ich habe hier gefunden, dass es einen bekannten Fehler in Pip gibt, der die Version nicht überprüft, wenn es ein Build-Verzeichnis mit entpackten Quellen gibt. Ich habe dies in meinem problematischen Paket überprüft und nach dem Löschen der Quellen aus dem build directory pip die erforderliche Version installiert.

16
simplylizz

Wenn Sie eine pip-Version verwenden, die mit einigen Distributionspaketen geliefert wird (z. B. Ubuntu python-pip), müssen Sie möglicherweise eine neuere pip-Version installieren:

Aktualisieren Sie pip auf die neueste Version:

Sudo pip install -U pip 

Bei "virtualenv" überspringen Sie "Sudo":

pip install -U pip 

Der folgende Befehl kann erforderlich sein, wenn Ihre Shell nach pip update etwas wie -bash: /usr/bin/pip: No such file or directory berichtet:

hash -d pip

Nun installieren Sie Ihr Paket wie gewohnt:

pip install -U foo

oder 

pip install foo==package.version.here

7
ribozz

Ich habe das gleiche Problem, um pika 0.9.5 auf 0.9.8 zu aktualisieren. Der einzige funktionierende Weg war die Installation von Tarball: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.

4
Ruth

Ich habe festgestellt, dass pip, wenn Sie Microversions verwenden, diese nicht zu erkennen scheint. Zum Beispiel konnten wir Version 1.9.9.1 nicht für ein Upgrade erhalten. 

0
mlissner

Für meinen Fall musste ich den .pip-Ordner in meinem Home-Verzeichnis löschen und erhielt dann spätere Versionen mehrerer Bibliotheken. Beachten Sie, dass dies unter Linux war.

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0
0
NateW

In meinem Fall erfüllte die verwendete Python-Version (3.4) die Abhängigkeiten von Django 2.1 (Python> = 3.5) nicht.

0