101 votes

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, et la version est vérifiée correctement. Mais quand j'essaie d'installer avec pip, il installe la version 1.1.0.0 à la place. Même si je spécifie explicitement la version à pip avec pip install -Iv tome==1.2.1.0-r4 je reçois ce message : 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 sur 1.2.1 est plus grande que celle sur 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
>>>

Une idée de la raison pour laquelle il choisit d'installer la version 1.1.0 à la place ?

0 votes

Impossible à reproduire. pip install -Iv tome==1.2.1.0-r4 s'installe pour moi (d'après les messages et les résultats de l'enquête). pip freeze le paquet tome==1.2.1.0-r4 .

0 votes

Il est probablement encore dans votre chemin quelque part ? Essayez-le avec -U

0 votes

Hm..d'accord, c'est intéressant. J'ai essayé de le désinstaller avec pip, je suppose que je vais devoir creuser un peu plus et m'assurer que tout est parti. Merci de vérifier !

109voto

Matt Fenwick Points 17097

Il s'agit d'une excellente question. Il m'a fallu une éternité pour la résoudre. Voici la solution qui fonctionne pour moi :

Apparemment, si pip peut trouver une version locale du paquet, pip préféreront les versions locales aux versions distantes. J'ai même déconnecté mon ordinateur d'Internet et réessayé. pip a quand même installé le paquet avec succès, et ne s'est même pas plaint, la source était manifestement locale.

La partie vraiment déroutante, dans mon cas, était que pip a trouvé les nouvelles versions sur pypi Je les ai signalés, puis j'ai 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 pip pour donner une sortie verbeuse en utilisant l'option -v ... mais un seul ne suffit pas. J'ai consulté l'aide, qui dit que vous pouvez faire -v plusieurs fois, jusqu'à 3x, pour une sortie plus verbeuse. C'est ce que j'ai fait :

pip install -vvv <my_package>

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

La source dans /tmp/pip-build-Root/ a la version 0.0.11, qui satisfait à l'exigence <my_package>.

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

0 votes

On dirait que ça n'a pas encore été corrigé.

1 votes

@Ale110 Le problème a été corrigé - voir ma réponse pour plus de détails.

5 votes

Pour info, vous pouvez utiliser -vvv au lieu de -v -v -v .

26voto

Piotr Dobrogost Points 14412

Merci à Marcus Smith Le problème a été corrigé dans la version 1.4 de pip qui a été publiée le 2013-07-23.

Les informations pertinentes de la journal des modifications pour cette version

Correction d'un certain nombre de problèmes (#413, #709, #634, #602, et #939) liés au nettoyage et la non-réutilisation des répertoires de compilation. (Pull #865, #948)

5 votes

Ceci devrait être marqué comme la réponse correcte. Mettez le tuyau à niveau comme ceci : pip install -U pip

2 votes

Ce correctif ne résout toujours pas le problème du pip utilisant silencieusement une version en cache, qui peut être résolu en utilisant la réponse de Iacchus

1 votes

Non, il ne semble pas avoir été réparé. Je rencontre le même problème en ce moment.

17voto

simplylizz Points 760

J'ai trouvé ici qu'il y a un bogue connu dans pip qui ne vérifie pas la version s'il y a un répertoire de construction avec des sources déballé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.

2 votes

Merci pour ces informations. Savez-vous où je dois chercher le répertoire de construction ? J'ai essayé de le supprimer de Python. \Lib\site -mais les résultats sont les mêmes. Je n'exécute pas la commande à partir d'un emplacement où le paquet existe ou autre.

0 votes

@sh1ftst0rm J'utilise virtualenv sous linux et pour django-tastypie c'était ça : "$VIRTUAL_ENV/build/django-tastypie". Essayez de vérifier en haut du répertoire Python ou utilisez simplement la recherche dans votre système. Vous pouvez également essayer d'utiliser "pip install -b <chemin vers le répertoire de construction personnalisé>".

1 votes

Cela ne semble pas être mon problème, j'ai cherché partout et je ne trouve aucune trace du paquet ou d'un répertoire de construction pour celui-ci sur mon système. Il doit s'agir d'un autre bogue dans pip =(. Bon conseil en tout cas, je suis sûr que ce sera la solution pour beaucoup de gens.

11voto

ribozz Points 146

Si vous utilisez un pip qui est fournie avec certains paquets de distribution (python-pip d'Ubuntu, par exemple), vous devrez peut-être installer une version plus récente. pip version :

Mise à jour pip à la dernière version :

sudo pip install -U pip

Dans le cas de "virtualenv", ignorez "sudo" :

pip install -U pip

La commande suivante peut être nécessaire, si votre shell rapporte quelque chose comme -bash: /usr/bin/pip: No such file or directory après pip mettre à jour :

hash -d pip

Maintenant, installez votre paquet comme d'habitude :

pip install -U foo

ou

pip install foo==package.version.here

6voto

Ruth Points 31

J'ai eu le même problème pour mettre à jour pika 0.9.5 vers 0.9.8. La seule façon de fonctionner était d'installer à partir d'une archive : pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz .

2 votes

+1 Merci, cela m'a permis de comprendre quelque chose d'important : pip repose sur les distributions de sources : avec ma dernière version, j'ai oublié de télécharger une dist source, donc quand j'ai essayé d'installer, il n'y avait que la version précédente. Cela ne résout pas mon problème initial, mais c'est utile de le savoir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X