Python pipenv在安装后会做些什么呢?安装后会占用大量时间并下载大量数据?
在遇到一些Python版本的噩梦后,我尝试了Python pipenv在安装后会做些什么呢?安装后会占用大量时间并下载大量数据?,python,ubuntu-16.04,pipenv,pyenv,Python,Ubuntu 16.04,Pipenv,Pyenv,在遇到一些Python版本的噩梦后,我尝试了pyenv和pipenv。但是当使用pipenv安装pygame和seaborn时,我注意到安装在几秒钟内发生,并且安装成功消息会立即出现。然后会显示一些锁定消息,等待时间长达几分钟,其中会显示一个加载图标,上面写着locking 在此期间,有大量数据被下载。下图所示。下载的数据是什么?为什么有必要?它可以被禁用吗?我现在很小心使用pipenv 这听起来与: pipenv lock下载已安装软件包及其依赖项的所有可用工件。它这样做是为了计算它们的散列,
pyenv
和pipenv
。但是当使用pipenv
安装pygame
和seaborn
时,我注意到安装在几秒钟内发生,并且安装成功
消息会立即出现。然后会显示一些锁定消息,等待时间长达几分钟,其中会显示一个加载图标,上面写着locking
在此期间,有大量数据被下载。下图所示。下载的数据是什么?为什么有必要?它可以被禁用吗?我现在很小心使用
pipenv
这听起来与:
pipenv lock下载已安装软件包及其依赖项的所有可用工件。它这样做是为了计算它们的散列,即使工件url在片段中包含散列。对于某些大型软件包,例如scipy,每个版本都有很大的依赖项和许多工件,这种行为可能会导致一些用户出现不合理的长时间延迟(893MB与50MB下载)
pipenv源代码的补丁形式的解决方法在这个bug报告中给出。如果可能的话,它从工件URL获取哈希值,而不是总是重新计算它,这似乎大大缩短了锁定时间
链接到解决方法:因为
pipenv
的开发人员很奇怪。是的,它们很奇怪
简而言之,pipenv
正在尝试下载每个依赖项以计算散列。因此,它可以生成一个带有散列的锁文件。很容易理解,这对于确保环境的一致性非常重要
但问题是,在过去,这是唯一的方法,因为Pypi
没有为包提供哈希。但就目前而言,这很可笑,因为Pypi
确实为每个包提供了散列。不需要下载整个包来获取标签。至少如果您可以直接从元数据中获取hashtag
由于未知的原因,
pipenv
的开发人员不想对此进行任何更改。如果pipenv锁定在某个地方卡住了
做
$pipenv安装--跳过锁定$pipenv锁 首先通过--skip lock跳过锁定部分 然后在以后有时间时手动执行锁定
它是有效的。非母语人士问题:散列真的被称为“散列标签”吗?我以为这只是为了#注释。如果社区使用可信任链来存储包哈希(区块链),这个问题应该解决吗?@FelixDombek我认为Sraw在术语上可能不一致。如果你查看pypi文档,你会看到一个hashtag(或数字符号,或磅符号,或octothorp;它们都是相同的东西)作为下载url的一部分,标记url片段;在该片段中,使用键
md5
指定散列。有关url部分的更多信息,请查看。