【问题标题】:why virtualenv (version 20) is much faster than python3 -m venv为什么 virtualenv(版本 20)比 python3 -m venv 快得多
【发布时间】:2020-09-16 16:55:00
【问题描述】:

我在 2015 年的 macbook 上进行了测试,virtualenv 的速度提高了 6 倍。

virtualenv 版本为 20.0.21

$ time virtualenv $RANDOM
created virtual environment CPython3.8.3.final.0-64 in 340ms
  creator CPython3Posix(dest=/private/tmp/4997, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/noname/Library/Application Support/virtualenv/seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

real    0m0.489s
user    0m0.269s
sys     0m0.283s
$ time /usr/local/opt/python@3.8/bin/python3 -m venv $RANDOM

real    0m3.112s
user    0m2.334s
sys     0m0.731s

python3.8 是通过 homebrew 安装的。

即使使用--creator venv --always-copy 选项,virtualenv 也更快:

$ time virtualenv --creator venv --always-copy $RANDOM
created virtual environment CPython3.8.3.final.0-64 in 418ms
  creator Venv(dest=/private/tmp/28878, clear=False, global=False, describe=CPython3Posix)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/noname/Library/Application Support/virtualenv/seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

real    0m0.554s
user    0m0.316s
sys     0m0.309s

为什么它们的性能不一样?

【问题讨论】:

  • venv 比较我相信你应该使用:virtualenv --seeder pip --creator venv $RANDOM
  • @sinoroc 感谢您指出--seeder 选项。

标签: python python-3.x virtualenv python-venv


【解决方案1】:

据我所知,大部分差异是由于用于配置新创建的虚拟环境的不同方法。

2020 年 2 月,virtualenv 的第 20 版发布,这是一次完全重写。随之而来的是新概念called seeders,它们定义了提供环境的不同方法,即使诸如 pipsetuptools 之类的东西在环境中可用。当前版本的 virtualenv 有两个播种机:

  • pip 这可能类似于 venv 和早期版本的 virtualenv 所做的。
  • app-data,当前的默认播种器,它使用不同的机制,可能是提高速度的更大贡献者。

来自文档:

app-data - 此方法使用用户应用程序数据目录来创建安装映像。这些图像只需要创建一次,随后的虚拟环境只需将这些图像链接/复制到它们的纯 python 库路径(site-packages 文件夹)。这使得除了第一个虚拟环境创建之外的所有虚拟环境都可以快速创建(pip 机制通常需要 98% 的 virtualenv 创建时间,因此通过创建这个我们可以链接到虚拟环境安装目录的安装映像,我们可以实现加速在复制的情况下将最初的 1 分 10 秒缩短到仅 8 秒,或者在符号链接可用的情况下缩短 0.8 秒 - 这是在 Windows、Linux/macOS 上的符号链接,这可以从 3+ 秒低至 100 毫秒)。

您还可以在此讨论中阅读更多技术细节:

【讨论】:

    【解决方案2】:

    Virtualenv 20.x 简单地进行了优化并巧妙地利用了它,使其更快; venv 标准库模块没有这些,可能也不会得到它们。

    【讨论】:

    • 我很想看到其中的一些优化和技巧列举。
    猜你喜欢
    • 2015-01-30
    • 2019-07-09
    • 1970-01-01
    • 2014-04-21
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多