pipenv 这么耗时,下载海量数据,安装后干什么?

What does pipenv do after installing that takes up so much time and downloads huge amounts of data?

在 Python 版本遇到了一些噩梦之后,我尝试了 pyenvpipenv。但是当使用 pipenv 安装 pygameseaborn 时,我注意到安装会在几秒钟内完成,并且会立即出现 Installation Succeeded 消息。然后显示一些锁定消息,等待几分钟,显示加载图标 Locking
在此期间,正在下载大量数据。图像如下所示。这些正在下载的数据是什么?为什么有必要?可以禁用吗?我现在对使用 pipenv 持谨慎态度。

这听起来与 https://github.com/pypa/pipenv/issues/3827 相关:

pipenv lock downloads every available artifact of installed packages and their dependencies. It does this to calculate their hashes, even when the artifact url includes the hash in a fragment. For some large packages, such as scipy, which have large dependencies and many artifacts per version, this behavior can result in unreasonably long delays for some users (893MB vs. 50MB download).

此错误报告本身给出了 pipenv 源代码补丁形式的解决方法。如果可能,它会从工件 URL 中获取哈希,而不是总是重新计算它,这似乎大大缩短了锁定时间。

Link 解决方法:https://github.com/pypa/pipenv/blob/4c003521052d3b607be5abedf989744a5c172bda/pipenv/patched/piptools/repositories/pypi.py#L60-L71

因为pipenv的开发者很奇怪。是的,他们很奇怪。

简而言之,pipenv 正在尝试下载每个依赖项来计算哈希值。所以它可以生成一个带哈希的锁文件。嗯,很容易理解,这对于确保一致的环境很重要。

但问题是,在过去,这是唯一的方法,因为 Pypi 没有为包提供哈希。虽然就目前而言,这很荒谬,因为 Pypi 确实为每个包提供了哈希值。无需下载整个包即可获取主题标签。至少如果您可以直接从元数据中获取主题标签。

由于未知原因,pipenv 的开发人员不想对此进行任何更改。

如果 pipenv 锁定卡在某处 做

$ pipenv 安装 --skip-lock
$pipenv 锁

先跳过锁定部分--skip-lock 然后在你有空的时候手动锁定
它有效。