<p>pip 10: "pip list" avertit "La désérialisation de l'entrée du cache a échoué, entrée ignorée"</p>

Créé le 16 avr. 2018  ·  27Commentaires  ·  Source: pypa/pip

Bonjour,
pip v.10 avertit à plusieurs reprises "La désérialisation de l'entrée du cache a échoué, entrée ignorée":

$ uname
Darwin
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.4
BuildVersion:   17E199
$ brew info python<strong i="7">@2</strong>
python<strong i="8">@2</strong>: stable 2.7.14 (bottled), devel 2.7.15rc1, HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python@2/2.7.14_3 (4,603 files, 81.8MB) *
  Poured from bottle on 2018-03-10 at 22:25:36
 :
 :
$ brew info python3
python: stable 3.6.5 (bottled), devel 3.7.0b3, HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5 (4,768 files, 100.2MB) *
  Poured from bottle on 2018-03-30 at 20:43:21
 :
 :
$ pip2 -V
pip 10.0.0 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)
$ pip3 -V
pip 10.0.0 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
$ pip2 list --outdated
Package  Version Latest      Type 
-------- ------- ----------- -----
protobuf 3.5.1   3.5.2.post1 wheel
$ pip3 list --outdated
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Package  Version Latest      Type 
-------- ------- ----------- -----
protobuf 3.5.1   3.5.2.post1 wheel
$ 
cache vendored dependency auto-locked bug

Commentaire le plus utile

Il semble que vous ayez gâché votre cache pip. Il est stocké dans ~/.cache/pip .

Si vous supprimez ce répertoire, ce problème doit être résolu.

Tous les 27 commentaires

J'ai également noté le même problème pour les versions 64 bits de Windows 7 et 10 Professionnel. Je vois le problème uniquement pour Python 3.5 et non pour Python 2.7 ou Python 3.6 (j'ai des installations séparées des 3 versions). L'ajout de --format legacy ou --no-cache-dir élimine le problème.

Correction temporaire de la mise à niveau pip3 à l'aide de.

curl https://bootstrap.pypa.io/get-pip.py | python3

Au lieu de pip install -U pip

Pour pip2 pip2 install --upgrade pip

Il semble que vous ayez gâché votre cache pip. Il est stocké dans ~/.cache/pip .

Si vous supprimez ce répertoire, ce problème doit être résolu.

Je vous remercie. Ce phénomène se reproduit. J'ai confirmé que pip3 list --no-cache-dir --outdated fonctionne sans avertissement.

Je soupçonne que le problème est que les entrées de cache créées dans Python 2 ne peuvent pas être désérialisées en Python 3. Si j'utilise l'option --cache-dir pour forcer différents caches pour Python 2 et Python 3, le problème disparaît.

Le message d'erreur est généré à partir de la ligne 139 C: \ Python36 \ Lib \ site-packages \ pip_vendor \ cachecontrol \ controller.py. La cause immédiate est un échec de Serializer.loads () dans C: \ Python36 \ Lib \ site-packages \ pip_vendor \ cachecontrol \ serialize.py ligne 75.

Je vous remercie. Votre analyse semble raisonnable.

@pradyunsg : Le problème n'est pas résolu en supprimant le répertoire du cache (voir le commentaire de @japagetw).

AFAIU, utiliser --no-cache-dir sur Python 3 n'est qu'une solution temporaire pour cela (c'est-à-dire qu'il s'agit d'un bogue).

Pouvons-nous faire fonctionner à nouveau le répertoire de cache partagé pour Python 2 et 3 (ou y a-t-il une raison pour laquelle la même version de pip >= 10 doit utiliser un format de cache différent sur PY2 vs PY3 )?

Cela semble être un bogue sérieux et une solution rapide devrait être de s'assurer que les noms de fichiers des entrées en cache contiennent une partie de version de sérialisation à l'intérieur.

Le fait que ce soit également sur stderr est assez ennuyeux.

La suppression du répertoire dans .cache et la création de 2 nouveaux pip2 et pip3 dans ce répertoire, a résolu le problème pour moi sur l'un de mes Mac temporairement, mais pas sur un autre. La réinstallation de pip3 via curl n'a pas aidé. En fait, le problème apparaît de manière incohérente et principalement, mais pas exclusivement, avec pip3 et non pip2.

Cela est probablement dû à un bogue dans le pipeline de mise en cache - il y a un peu d'histoire avec msgpack faisant des choses incorrectement autour des octets.

Si quelqu'un peut jeter un coup d'œil à cela, avant que l'un des responsables ne trouve le temps de le faire, ce serait cool. :)

Quelqu'un envisage-t-il de faire quelque chose à propos de ce bogue nouvellement introduit? pip doit être mis à jour dès que possible pour éviter les conflits de caches incompatibles.

Les solutions de contournement mentionnées ici ne sont pas vraiment applicables dans tous les cas et sont susceptibles de causer plus de problèmes que le tri. L'ajout d'une partie de gestion des versions dans la dénomination des entrées de cache résoudrait ce problème une fois pour toutes, même si le format du cache changerait à nouveau.

Potentiellement, tous les développeurs de packages python rencontreraient ce problème s'ils utilisent tox pour tester avec plusieurs versions de python. Veuillez ne pas leur demander d'isoler les caches pour chaque cible toxique, cela va à l'encontre de l'objectif d'avoir un cache.

J'ai aussi ce problème.

J'ai aussi le même problème

ce qui se produit?? trop de bogues et de problèmes depuis la version 9.0.1

@HakShak Le fait que stderr soit utilisé est une bonne chose. La spécification POSIX documente et exige que tous les messages de journalisation soient envoyés à stderr et non à stdout, y compris les erreurs, les avertissements, les informations et le débogage. Seule la sortie normale du programme doit aller à stdin. Cela signifie généralement, pour la plupart des outils: une sortie analysable par ordinateur. Par exemple, sur un gestionnaire de paquets, stdout ne devrait contenir que des paquets installés / supprimés / mis à jour, sans le passe-partout qui devrait aller à stderr. Je me souviens avoir corrigé quelques outils non conformes au fil des ans. Le flux de sortie n'est pas le problème ici.

D'un autre côté, je viens d'observer que ce bogue a été ajouté au jalon 18.0, je ne sais pas comment le prendre, car la version actuelle est 10.0. Est-ce que c'est très long dans le futur, ou peut-être que je ne connais pas un plan pour améliorer la version de pip pour qu'elle corresponde à l'année en cours?

Est-ce que c'est très long dans le futur, ou peut-être que je ne connais pas un plan pour améliorer la version de pip pour qu'elle corresponde à l'année en cours?

Nous sommes passés à CalVer (# 5324), 18.0 sera la prochaine version de pip, probablement le mois prochain.

J'ai trouvé que sur Python 2, pip est capable d'utiliser un cache rempli par une exécution Python 3 mais pas l'inverse.

Une réponse mise en cache sur Py2 entraîne le stockage dans le cache d'un en-tête qui se charge sur Py3 comme bytes au lieu de str . Cela provoque l'échec de la désérialisation. Travailler sur un PR pour le réparer en amont.

PR en amont: ionrock / cachecontrol # 190

Upstream PR https://github.com/ionrock/cachecontrol/pull/190 est fusionné et publié dans CacheControl 0.12.5.

pip absorbera ce changement lorsque nous mettrons à jour nos dépendances vendues en préparation de la prochaine version. :)

Je rencontre le même problème.

C'est l'erreur que je reçois

Échec de la désérialisation de l'entrée du cache, entrée ignorée
Retrying (Retry (total = 4, connect = None, read = None, redirect = None, status = None)) après la connexion interrompue par 'ProtocolError (' Connection aborted. ', ConnectionResetError (10054,' Une connexion existante a été fermée de force par l'hôte distant ', Aucun, 10054, Aucun))': / simple / pip /
Retrying (Retry (total = 3, connect = None, read = None, redirect = None, status = None)) après la connexion interrompue par 'ProtocolError (' Connection aborted. ', ConnectionResetError (10054,' Une connexion existante a été fermée de force par l'hôte distant ', Aucun, 10054, Aucun))': / simple / pip /
Retrying (Retry (total = 2, connect = None, read = None, redirect = None, status = None)) après la connexion interrompue par 'ProtocolError (' Connection aborted. ', ConnectionResetError (10054,' Une connexion existante a été fermée de force par l'hôte distant ', Aucun, 10054, Aucun))': / simple / pip /
Retrying (Retry (total = 1, connect = None, read = None, redirect = None, status = None)) après la connexion interrompue par 'ProtocolError (' Connection aborted. ', ConnectionResetError (10054,' Une connexion existante a été fermée de force par l'hôte distant ', Aucun, 10054, Aucun))': / simple / pip /
Retrying (Retry (total = 0, connect = None, read = None, redirect = None, status = None)) après la connexion interrompue par 'ProtocolError (' Connection aborted. ', ConnectionResetError (10054,' Une connexion existante a été fermée de force par l'hôte distant ', Aucun, 10054, Aucun))': / simple / pip /
Exigence déjà à jour: pip dans c: \ programdata \ anaconda3 \ lib \ site-packages
Vous utilisez la version 9.0.3 de pip, mais la version 18.0 est disponible.
Vous devriez envisager la mise à niveau via la commande 'python -m pip install --upgrade pip'.

Comment éviter cela. Pour cette raison, je ne peux pas installer d'autres packages car il me demande de mettre à niveau pip.

Il semble que vous ayez gâché votre cache pip. Il est stocké dans ~/.cache/pip .

Si vous supprimez ce répertoire, ce problème doit être résolu.

Je suis plus intéressé par, qu'est-ce que la désérialisation des entrées de cache?

https://github.com/pypa/pip/issues/5250#issuecomment -394706450 explique pourquoi il a échoué.

En substance, l'erreur se produit en raison d'une incompatibilité lors de la conversion d'une requête http en chaîne (sérialisation). Cette erreur / avertissement apparaît lorsque vous essayez de convertir à nouveau cette chaîne en une requête http (désérialisation).

Il semble que vous ayez gâché votre cache pip. Il est stocké dans ~/.cache/pip .

Si vous supprimez ce répertoire, ce problème doit être résolu.

Merci beaucoup.

Facile à résoudre ce problème, exécutez l'application ou le terminal en tant qu'administrateur

Ce thread a été automatiquement verrouillé car il n'y a eu aucune activité récente après sa fermeture. Veuillez ouvrir un nouveau numéro pour les bogues associés.

Cette page vous a été utile?
0 / 5 - 0 notes