Pip: AttributeError: l'objet 'NoneType' n'a pas d'attribut 'is_hash_allowed'

Créé le 23 juil. 2019  ·  18Commentaires  ·  Source: pypa/pip

Environnement

  • version de pip: 19.2
  • Version Python: 3.6.8
  • Système d'exploitation: Mac OSX (Darwin Kernel version 18.6.0)

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

  1. Obtenez la dernière version du package de PyPI.
  2. Puis lancez pip list --outdated --format=columns
  3. Une erreur se produit.

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'
lisshow auto-locked bug

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.

Tous les 18 commentaires

@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)! :)

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