Pip: AttributeError: Das Objekt 'NoneType' hat kein Attribut 'is_hash_allowed'.

Erstellt am 23. Juli 2019  ·  18Kommentare  ·  Quelle: pypa/pip

Umgebung

  • Pip-Version: 19.2
  • Python-Version: 3.6.8
  • Betriebssystem: Mac OSX (Darwin Kernel Version 18.6.0)

Beschreibung
Ich habe in meinem Projekt auch ein env-Update durchgeführt, einschließlich pip. Danach wollte ich veraltete Pakete mit folgendem Befehl überprüfen:

pip list --outdated --format=columns

Nach dieser Ausnahme wurde ausgelöst.

Erwartetes Verhalten
Ich habe eine Liste von Paketen oder eine leere Liste erwartet.

Wie zu reproduzieren

  1. Holen Sie sich die neueste Version des Pakets von PyPI.
  2. Führen Sie dann pip list --outdated --format=columns
  3. Ein Fehler tritt auf.

Ausgabe

(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

Hilfreichster Kommentar

Das Update befindet sich im Master. Ich werde die Veröffentlichung gleich machen - nach einem langen Tag heute ein bisschen Ruhe bekommen.

Alle 18 Kommentare

@ptynecki Vielen Dank für die Einreichung dieser Ausgabe!

/ cc @cjerdonek, da er an diesem Teil der Codebasis gearbeitet hat und damit besser vertraut ist als ich.

Gleiches Problem unter Windows 10, Python 3.7.3

Gleiches Problem unter Ubuntu 18.04.2 LTS, Python 3.6.8

Gleiches Problem unter macOS 18.6.0 und Python 3.7.4

Gleiches Problem unter Windows 10, Python 3.7.4

Gleiches Problem mit Fedora 29, Python 3.7.3.

Als Problemumgehung ...

python3 -m pip install -UI --user  'pip<19.2'

neu installierte pip Version 19.1.1. Die vollständige Befehlsausgabe ist jedoch merkwürdig.

$ 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

Warum wird Successfully installed pip-19.2 gemeldet?

Vielen Dank für die Bestätigung, dass dies auf mehreren Betriebssystemen erfolgt!

Leute, wenn Sie vor dem gleichen Problem stehen, veröffentlichen Sie bitte keine zusätzlichen Kommentare. Bitte benutze GitHub-Reaktionen, um den ersten Beitrag zu verbessern und das Problem zu abonnieren.

Auf diese Weise könnten die Betreuer eine Diskussion darüber führen, wie dies in diesem Problem behoben werden kann - zusätzliche "Ich auch" -Kommentare helfen niemandem.

Hmm, ich denke der Typprüfer hat uns hier gescheitert. Die Typanmerkung besagt, dass hashes nicht None sein darf, in den gemeldeten Fällen jedoch None: https://github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py # L202 -L209

Nach einem kurzen Blick denke ich, dass eine gute Lösung für den Moment darin besteht, Link.is_hash_allowed(hashes) zu aktualisieren, um False wenn hashes None ist (und die Anmerkung durch Aktualisieren des Parameters in Einklang zu bringen bis Optional[Hashes] ). Das ist an dieser Stelle wahrscheinlich einfacher und sicherer als der Versuch, Dinge an möglicherweise mehreren Stellen zu aktualisieren, um sicherzustellen, dass das Argument hashes immer nicht None , zumal wir nicht scheinen können stützen Sie sich auf die Typprüfung, um mit 100% iger Sicherheit zu bestätigen.

Ich denke, die Typprüfung hat uns hier gescheitert.

Ähhh. Ja - strict_optional ist False für pip._internal.index und genau das ist der Fehler.

Wir können uns nicht auf die Typprüfung stützen, um dies mit 100% iger Sicherheit zu bestätigen.

Ja, wir können uns nicht vollständig darauf verlassen, solange wir diese Flags für eine schrittweise Übernahme haben.

Ähhh. Yep - strict_optional ist False für pip._internal.index und genau dieser Fehler.

Und obwohl für models/link.py in dem die Funktion definiert ist, strict_optional aktiviert ist.

Okay, ich habe PR # 6774 dafür gepostet.

Diese Ausgabe sagt mir, dass ein guter Schritt danach (für 19.3 - nicht die Patch-Version) darin besteht, strict_optional für index.py einzuschalten.

Und obwohl für models / link.py, in dem die Funktion definiert ist, strict_optional aktiviert ist.

Ja, mypy führt Überprüfungen an der Anrufstelle durch, wobei die Regeln an der Anrufstelle verwendet werden.


Ihr Änderungsvorschlag und Ihre PR sehen für mich gut aus. Wenn wir kein anderes Problem sehen, kann ich heute Abend die Bugfix-Veröffentlichung durchführen - in ca. 3-5 Stunden.

Wenn wir kein anderes Problem sehen, kann ich heute Abend die Bugfix-Veröffentlichung durchführen - in ca. 3-5 Stunden.

Das wäre toll. Vielen Dank dafür.

Hallo. FWIW Ich habe möglicherweise in 19.2 einen Fehler gefunden, der nichts mit diesem zu tun hat. Ich versuche es immer noch herauszufinden und werde danach eine neue Ausgabe eröffnen.

BEARBEITEN:
Ah, jemand hat bereits eine https://github.com/pypa/pip/issues/6775 geöffnet

Das Update befindet sich im Master. Ich werde die Veröffentlichung gleich machen - nach einem langen Tag heute ein bisschen Ruhe bekommen.

Die Version mit dieser Fehlerbehebung wurde hochgeladen. Vielen Dank an alle (und besonders an @cjerdonek)! :) :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen