环境
描述
我在我的项目中也进行了环境更新,包括pip。 之后,我想用命令检查过时的软件包:
pip list --outdated --format=columns
在那之后提出了例外。
预期行为
我期望软件包列表或空列表。
如何繁殖
pip list --outdated --format=columns
输出量
(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感谢您提交此问题!
/ 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)! :)
最有用的评论
该修补程序在主机中。 我会做一下发布-今天经过漫长的一天后要休息一下。