【问题标题】:pipenv doesn't show progress bar when installing packagespipenv 安装包时不显示进度条
【发布时间】:2023-03-28 20:36:01
【问题描述】:

当我尝试使用 pipenv 安装软件包时,进度条不显示。这对我来说非常重要,因为我的数据连接有限,我需要提前知道我正在下载的包的大小。 这是我在 pipenv 中得到的一个例子

pipenv install spacy
Installing spacy...
[   =] Installing spacy...  

这是我在使用普通 pip 安装软件包时得到的结果

pip install spacy
Collecting spacy
  Downloading spacy-3.0.1-cp39-cp39-win_amd64.whl (11.4 MB)
     |████████████                    | 4.3 MB 2.2 MB/s eta 0:00:04

有没有办法用 pipenv 显示进度条? tutorials 之类的其他人无需额外代码即可显示进度条。可能是在新版本中它不是显示进度条的默认设置?

我确实有某种方法可以告诉包的大小,我只是执行 pip install,检查大小,然后立即中止,以便我可以去 pipenv 安装

【问题讨论】:

    标签: python pipenv pipenv-install


    【解决方案1】:

    目前无法使用 pipenv 显示与 pip 相同的 下载 进度条。早在 2018 年 7 月,这里就曾提出过要求:pipenv couldn't display progress bar when it downloads package,该功能要求仍然开放。

    我的意思是,有时当我们想安装一个像 pytorch 这样的大 pypi 包时(pytorch 的 .whl 包大小为 400+Mb),而一个人的互联网速度很慢(比如 400Kb/s)。在这种情况下,我们需要等待大约 17 分钟才能完成下载。在此期间,用户无法向 pipenv 添加选项以显示包下载速度或完成率。

    我想要的是类似 wget 和 pip 的进度条功能。

    欢迎拉取请求,我同意这将是一个很棒的功能

    因此,遗憾的是,现在没有办法拥有与 pip 相同的功能,或者至少无法模拟 pip 的 --progress-bar 选项。随意提出该线程并订阅该问题以获取更新,以防它被实施。

    tutorials 之类的其他人无需额外代码即可显示进度条。可能是在新版本中它不是显示进度条的默认设置?

    我认为你混淆了 pip 的 download 进度条和 pipenv 的 spinnerinstallation 进度条:

    $ pipenv install pytest
    Installing pytest... 
    ⠏ Installing pytest...
    ...
    Updated Pipfile.lock (34070a)!
    Installing dependencies from Pipfile.lock (34070a)...
      ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/1 —
    

    pipenv install 除了安装包之外还可以做很多其他事情,例如生成锁文件、更新 Pipfile 和维护虚拟环境。 spinner (⠏ Installing pytest...) 将所有这些操作都考虑在内,通常需要一段时间才能完成。最后的 安装 栏只是表示“将文件从临时目录移动到您的虚拟环境”之类的内容,并且不提供任何信息下载大小和时间。虽然它们都不能解决你的问题。

    这对我来说非常重要,因为我的数据连接有限,而且我需要提前知道我正在下载的包的大小。

    如果您从PyPi(默认情况下)安装包,解决方法是首先转到包的 PyPi 页面的“下载文件”部分,并检查下载文件的大小。这是 spacy 的一个:https://pypi.org/project/spacy/#files

    pip install 实际上首先要做的是下载这些相同的文件。例如,spacy-3.0.1-*.whl 的文件大小约为 11~12Mb,与“spacy-3.0.1-cp39-cp39-win_amd64.whl (11.4 MB)”的文件大小相匹配。

    另一种解决方法是向该包的 JSON API 发出 GET 请求:https://pypi.org/pypi/spacy/json,然后查找 releases > <version> > size

    $ curl https://pypi.org/pypi/spacy/json > spacy.json
    $ python3
    >>> import json
    >>> with open('spacy.json') as f:
    ...   data = json.load(f)
    ... 
    >>> sizes = [v['size'] for v in data['releases']['3.0.1']]
    >>> sizes
    [12444769, 12750738, 11605145, 12283655, 12727469, 11606585, 12370380, 12851086, 11760155, 12176093, 12500325, 11395223, 7016311
    

    这将为您提供相同的 11~12Mb 估计值。 (我没有在脚本上花太多心思,所以它需要大量 工作才能将它变成像pip-check-size <package> 之类的可重用实用程序。它还需要你知道版本事先)。

    这两种变通方法可能比您现在已经在做的更麻烦:

    我只是进行 pip 安装,检查大小,然后立即中止,以便我可以进行 pipenv 安装

    【讨论】:

    • 非常感谢!您知道中止 pip 安装(使用 Ctrl+C)是否会留下任何类型的垃圾文件?还是完全干净的中止,不会修改磁盘上的任何内容?
    • @Caerwin 嗯,如果您打算在之后使用pipenv 安装它,那么只需保留已下载/缓存的任何文件pip 就可以了,因为pipenv 可以使用那些相同的文件,这将为您节省一些数据,因为您不需要再次下载它。如果你真的想要,有一个pip cache purge 命令来清理安装过程中创建的文件。但是,清除缓存意味着将来再次进行网络调用,这不会保存数据。所以,我说不要管它们,除非你要节省磁盘空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多