Umgebung
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
pip list --outdated --format=columns
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'
@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)! :) :)
Hilfreichster Kommentar
Das Update befindet sich im Master. Ich werde die Veröffentlichung gleich machen - nach einem langen Tag heute ein bisschen Ruhe bekommen.