Pip: AttributeError:“ NoneType”对象没有属性“ is_hash_allowed”

创建于 2019-07-23  ·  18评论  ·  资料来源: pypa/pip

环境

  • 点子版本:19.2
  • Python版本:3.6.8
  • 操作系统:Mac OSX(Darwin Kernel Version 18.6.0)

描述
我在我的项目中也进行了环境更新,包括pip。 之后,我想用命令检查过时的软件包:

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,Python 3.7.3上的相同问题

在Ubuntu 18.04.2 LTS,Python 3.6.8上存在相同问题

在macOS 18.6.0和Python 3.7.4上存在相同问题

Windows 10,Python 3.7.4上的相同问题

在Fedora 29,Python 3.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

感谢您确认在多个操作系统上发生的错误!

亲朋好友,如果您遇到相同的问题,请不要发表其他评论。 请使用GitHub的回应来评论第一篇文章并订阅该问题。

这样,维护者就能够在此问题上讨论如何解决此问题-附加的“我也是”注释也不会帮助任何人。

嗯,我猜这里类型检查器使我们失败了。 类型注释表示hashes必须为非无,但在报告的情况下为无: https :

快速浏览之后,我认为目前的一个好解决方案可能是更新Link.is_hash_allowed(hashes)以返回False如果hashes为None(并通过更新参数使注释对齐)到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 index.py

即使定义了函数的models / link.py确实启用了strict_optional。

是的-mypy使用呼叫站点上的规则在呼叫站点进行检查。


您建议的修复和PR对我来说看起来不错。 如果没有其他问题出现,我可以在今天晚上(从现在起大约3-5小时)进行错误修复。

如果没有其他问题出现,我可以在今天晚上(从现在起大约3-5小时)进行错误修复。

那很好啊。 非常感谢您这样做。

你好。 FWIW我可能在19.2中发现了与该错误无关的错误。 我正在尝试找出答案,然后再开一个新的问题。

编辑:
嗯,有人已经打开了一个https://github.com/pypa/pip/issues/6775

该修补程序在主机中。 我会做一下发布-今天经过漫长的一天后要休息一下。

带有此错误修复程序的发行版已上传。 谢谢大家(尤其是@cjerdonek)! :)

此页面是否有帮助?
0 / 5 - 0 等级