Environnement
La description
J'ai fait une mise à jour d'env dans mon projet, y compris pip. Après cela, je voulais vérifier les paquets obsolètes avec la commande:
pip list --outdated --format=columns
Après cette exception a été soulevée.
Comportement prévisible
J'attendais une liste de paquets ou une liste vide.
Comment reproduire
pip list --outdated --format=columns
Production
(env) project (develop) $ pip list --outdated --format=columns
ERROR: Exception:
Traceback (most recent call last):
File "/project/env/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 188, in main
status = self.run(options, args)
File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 156, in run
packages = self.get_outdated(packages, options)
File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 164, in get_outdated
dist for dist in self.iter_packages_latest_infos(packages, options)
File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 164, in <listcomp>
dist for dist in self.iter_packages_latest_infos(packages, options)
File "/project/env/lib/python3.6/site-packages/pip/_internal/commands/list.py", line 195, in iter_packages_latest_infos
best_candidate = evaluator.get_best_candidate(all_candidates)
File "/project/env/lib/python3.6/site-packages/pip/_internal/index.py", line 729, in get_best_candidate
best_candidate = max(candidates, key=self._sort_key)
File "/project/env/lib/python3.6/site-packages/pip/_internal/index.py", line 710, in _sort_key
has_allowed_hash = int(link.is_hash_allowed(self._hashes))
File "/project/env/lib/python3.6/site-packages/pip/_internal/models/link.py", line 213, in is_hash_allowed
return hashes.is_hash_allowed(self.hash_name, hex_digest=self.hash)
AttributeError: 'NoneType' object has no attribute 'is_hash_allowed'
@ptynecki Merci d'avoir
/ cc @cjerdonek car il a travaillé sur cette partie de la base de code et en est plus familier que moi.
Même problème sous Windows 10, Python 3.7.3
Même problème sur Ubuntu 18.04.2 LTS, Python 3.6.8
Même problème sur macOS 18.6.0 et Python 3.7.4
Même problème sous Windows 10, Python 3.7.4
Même problème sur Fedora 29, Python 3.7.3.
Pour l'instant, comme solution de contournement, ...
python3 -m pip install -UI --user 'pip<19.2'
réinstallé pip
version 19.1.1. Bien que la sortie de la commande complète soit curieuse.
$ python3 -m pip install -UI --user 'pip<19.2'
Collecting pip<19.2
Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-19.2
Pourquoi rapporte-t-il Successfully installed pip-19.2
?
Merci pour la confirmation que cela se produit sur plusieurs systèmes d'exploitation!
Mes amis, si vous rencontrez le même problème, veuillez ne pas publier de commentaires supplémentaires. Veuillez utiliser les réactions GitHub pour voter pour le premier message et vous abonner au problème.
De cette façon, les responsables pourraient avoir une discussion sur la façon de résoudre ce problème dans ce problème - des commentaires supplémentaires "moi aussi" n'aideront personne.
Hmm, je suppose que le vérificateur de type nous a échoué ici. L'annotation de type dit que hashes
doit être non-None, mais il est None dans les cas signalés: https://github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py # L202 -L209
Après un rapide coup d'œil, je pense qu'une bonne solution pour le moment peut être de mettre à jour Link.is_hash_allowed(hashes)
pour renvoyer False
si hashes
est None (et mettre l'annotation en alignement en mettant à jour le paramètre à Optional[Hashes]
). C'est probablement plus simple et plus sûr à ce stade que d'essayer de mettre à jour les choses à plusieurs endroits pour s'assurer que l'argument hashes
est toujours non- None
, d'autant plus que nous ne parvenons pas à le faire. s'appuyer sur le vérificateur de type pour confirmer avec une certitude à 100%.
Je suppose que le vérificateur de type nous a échoué ici.
Ahhh. Oui - strict_optional est False pour pip._internal.index
et c'est exactement cet échec.
nous ne pouvons pas sembler nous appuyer sur le vérificateur de type pour confirmer avec une certitude à 100%.
Oui, nous ne pouvons pas entièrement nous y fier, tant que nous avons ces indicateurs pour une adoption progressive.
Ahhh. Oui - strict_optional est False pour pip._internal.index et c'est exactement cet échec.
Et même si models/link.py
où la fonction est définie a strict_optional
activé.
D'accord, j'ai publié le PR # 6774 pour cela.
Ce problème m'indique qu'une bonne étape après cela (pour 19.3 - pas la version du correctif) sera d'activer strict_optional
pour index.py
..
Et même si models / link.py où la fonction est définie a strict_optional activé.
Oui - mypy effectue des vérifications sur le site d'appel, en utilisant les règles du site d'appel.
Votre solution suggérée et vos relations publiques me semblent bonnes. Si nous ne voyons aucun autre problème survenir, je peux faire la publication de la correction de bogue dans la soirée d'aujourd'hui, dans environ 3 à 5 heures.
Si nous ne voyons aucun autre problème survenir, je peux faire la publication de la correction de bogue dans la soirée d'aujourd'hui, dans environ 3 à 5 heures.
Ce serait génial. Merci beaucoup d'avoir fait ça.
Bonjour. FWIW J'ai peut-être trouvé un bogue dans 19.2 qui n'est pas lié à celui-ci. J'essaye de le comprendre encore et ouvrirai un nouveau problème par la suite.
ÉDITER:
Ah, quelqu'un a déjà ouvert un https://github.com/pypa/pip/issues/6775
Le correctif est en master. Je ferai la sortie dans un instant - je me reposerai un peu après une longue journée d'aujourd'hui.
La version avec ce correctif de bogue a été téléchargée. Merci à tous (et surtout @cjerdonek)! :)
Commentaire le plus utile
Le correctif est en master. Je ferai la sortie dans un instant - je me reposerai un peu après une longue journée d'aujourd'hui.