Pip: AttributeError: 'NoneType'オブジェクトに属性がありません 'is_hash_allowed'

作成日 2019年07月23日  ·  18コメント  ·  ソース: pypa/pip

環境

  • pipバージョン:19.2
  • Pythonバージョン:3.6.8
  • OS:Mac OSX(Darwinカーネルバージョン18.6.0)

説明
プロジェクトでpipも含めてenvを更新しました。 その後、コマンドで古いパッケージをチェックしたかった:

pip list --outdated --format=columns

その後、例外が発生しました。

予想される行動
パッケージのリストまたは空のリストを期待していました。

再現する方法

  1. PyPIからパッケージの最新バージョンを入手してください。
  2. 次に、 pip list --outdated --format=columns実行します
  3. エラーが発生します。

出力

(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

最も参考になるコメント

修正はマスターにあります。 リリースは少しやります。今日は長い一日を過ごした後、少し休憩します。

全てのコメント18件

@ptyneckiこの問題を提出していただきありがとうございます!

/ cc @cjerdonekは、コードベースのこの部分に取り組んでいて、私よりもよく知っているからです。

Windows 10、Python3.7.3で同じ問題

Ubuntu 18.04.2 LTS、Python3.6.8で同じ問題

macOS18.6.0とPython3.7.4で同じ問題

Windows 10、Python3.7.4で同じ問題

Fedora 29、Python3.7.3で同じ問題。

今のところ、回避策として、...

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

pipバージョン19.1.1を再インストールしました。 ただし、完全なコマンド出力は興味深いものです。

$ 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

なぜSuccessfully installed pip-19.2報告するのですか?

複数のOSでこれが発生していることを確認していただきありがとうございます。

皆さん、同じ問題に直面している場合は、追加のコメントを投稿しないでください。 GitHubのリアクションを使用して、最初の投稿に賛成し、問題をサブスクライブしてください。

そうすれば、メンテナはこの問題でこれを解決する方法について話し合うことができます-追加の「私も」コメントは誰にも役立ちません。

うーん、タイプチェッカーはここで失敗したと思います。 タイプアノテーションには、 hashesはNone以外である必要があると記載されていますが、報告されているケースではNoneです: //github.com/pypa/pip/blob/369ec7c0a8a81a076ca5584c34c8530d7a30a220/src/pip/_internal/models/link .py#L202 -L209

簡単に見てみると、今のところ良い修正は、 Link.is_hash_allowed(hashes)を更新して、 hashesがNoneの場合にFalseを返すことだと思います(そして、パラメーターを更新してアノテーションを整列させます〜 Optional[Hashes] )。 hashes引数が常に非Noneであることを確認するために、おそらく複数の場所で物事を更新しようとするよりも、この時点でおそらくより簡単で確実です。タイプチェッカーに寄りかかって、100%確実に確認します。

タイプチェッカーはここで失敗したと思います。

ああ。 はい-strict_optionalはpip._internal.indexに対してFalseであり、これはまさにその失敗です。

タイプチェッカーに頼って100%確実に確認することはできないようです。

ええ、段階的に採用するためのこれらのフラグがある限り、完全に信頼することはできません。

ああ。 はい-pip._internal.indexのstrict_optionalはFalseであり、これはまさにその失敗です。

また、関数が定義されているmodels/link.pyでも、 strict_optional有効になっています。

さて、これについてはPR#6774を投稿しました。

この問題は、この後の良いステップ(19.3の場合-パッチリリースではない)は、 index.pyに対してstrict_optionalオンにすることであることを示しています。

また、関数が定義されているmodels / link.pyでは、strict_optionalが有効になっています。

ええ-mypyは、呼び出しサイトのルールを使用して、呼び出しサイトでチェックを行います。


あなたの提案した修正とPRは私にはよく見えます。 他に問題が発生しない場合は、今日の夕方にバグ修正リリースを行うことができます。これから3〜5時間後です。

他に問題が発生しない場合は、今日の夕方にバグ修正リリースを行うことができます。これから3〜5時間後です。

それは素晴らしいことです。 どうもありがとうございました。

こんにちは。 FWIW19.2でこれとは関係のないバグを見つけたかもしれません。 私はまだそれを理解しようとしています、そして後で新しい問題を開きます。

編集:
ああ、誰かがすでに1つを開いていますhttps://github.com/pypa/pip/issues/6775

修正はマスターにあります。 リリースは少しやります。今日は長い一日を過ごした後、少し休憩します。

このバグ修正を含むリリースがアップロードされました。 みんな(そして特に@cjerdonek)に感謝します! :)

このページは役に立ちましたか?
0 / 5 - 0 評価