web-dev-qa-db-fra.com

Pourquoi pip installe-t-il une ancienne version de mon paquet?

Je viens de télécharger une nouvelle version de mon paquet sur PyPi (1.2.1.0-r4): Je peux télécharger le fichier Egg et l'installer avec easy_install. La version est extraite correctement. Mais lorsque j'essaye d'installer avec pip, il installe plutôt la version 1.1.0.0. Même si je spécifie explicitement la version à utiliser avec pip install -Iv tome==1.2.1.0-r4, je reçois le message suivant: Requested tome==1.2.1.0-r4, but installing version 1.1.0.0, mais je ne comprends pas pourquoi.

J'ai vérifié deux fois avec parse_version et confirmé que la chaîne de version sous 1.2.1 était supérieure à celle sous 1.1.0, comme indiqué:

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

Vous avez donc une idée de pourquoi choisir d'installer plutôt la version 1.1.0?

62
brianmearns

Ceci est une excellente question. Il m'a fallu une éternité pour comprendre. C'est la solution qui fonctionne pour moi:

Apparemment, si pip peut trouver une version locale du paquet, pip préfèrera les versions locales aux versions distantes. J'ai même déconnecté mon ordinateur d'Internet et essayé à nouveau - lorsque pip a toujours installé le package avec succès et ne s'est même pas plaint, la source était évidemment locale. 

La partie vraiment déroutante, dans mon cas, est que pip a trouvé les versions les plus récentes sur pypi , les a signalées, puis est allé de l’avant et a réinstallé l’ancienne version de toute façon ... arggh. En outre, il ne m'a pas dit ce qu'il faisait et pourquoi.

Alors, comment ai-je résolu ce problème?

Vous pouvez obtenir que pip donne une sortie détaillée en utilisant l'indicateur -v ... mais un seul ne suffit pas. Je RTFM-ed l'aide, qui dit que vous pouvez faire -v plusieurs fois, jusqu'à 3x, pour une sortie plus détaillée. Alors j'ai fait:

pip install -v -v -v <my_package>

Puis j'ai regardé à travers la sortie. Une ligne a attiré mon attention:

La source dans/tmp/pip-build-root/a la version 0.0.11, qui répond à l'exigence <my_package>

J'ai supprimé ce répertoire, après quoi pip a installé la dernière version de pypi.

78
Matt Fenwick

Merci à Marcus Smith , qui fait un travail incroyable en tant que mainteneur de pip, ceci a été corrigé dans la version 1.4 de pip qui a été publiée le 2013-07-23.

Informations pertinentes provenant de changelog pour cette version

Correction d'un certain nombre de problèmes (n ° 413, n ° 709, n ° 634, n ° 602 et n ° 939) liés à nettoyer et ne pas réutiliser les répertoires de construction. (Pull # 865, # 948)

23
Piotr Dobrogost

Essayez de télécharger à nouveau le paquet avec:

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

J'ai trouvé ici qu'il existe un bogue connu dans pip qui ne vérifie pas la version s'il existe un répertoire de construction avec des sources non compressées. J'ai vérifié cela sur mon paquet troublant et après avoir supprimé ses sources du répertoire de construction, pip a installé la version requise.

16
simplylizz

Si vous utilisez une version pip fournie avec certains packages de distribution (par exemple, Ubuntu python-pip), vous devrez peut-être installer une version plus récente de pip:

Mettez à jour pip à la dernière version:

Sudo pip install -U pip 

En cas de "virtualenv", passez "Sudo":

pip install -U pip 

La commande suivante peut être requise, si votre shell rapporte quelque chose comme -bash: /usr/bin/pip: No such file or directory après la mise à jour de pip:

hash -d pip

Maintenant, installez votre paquet comme d'habitude:

pip install -U foo

ou 

pip install foo==package.version.here

7
ribozz

Vous avez le même problème pour mettre à jour le pika 0.9.5 à 0.9.8. Le seul moyen de travailler consistait à installer depuis tarball: pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz.

4
Ruth

J'ai trouvé que si vous utilisez des microversions, pip ne semble pas les reconnaître. Par exemple, nous n'avons pas pu obtenir la version 1.9.9.1 à mettre à niveau. 

0
mlissner

Dans mon cas, j'ai dû supprimer le dossier .pip de mon répertoire personnel, puis j'ai pu obtenir des versions ultérieures de plusieurs bibliothèques. Notez que c'était sur linux.

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

Dans mon cas, la version de Python utilisée (3.4) ne répondait pas aux exigences des dépendances de Django 2.1 (python> = 3.5).

0
Alberto Chiusole