为什么virtualenv (版本20)比python3快很多 -m venv

问题描述 投票:1回答:2

我已经在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/[email protected]/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

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

python python-3.x virtualenv python-venv
2个回答
3
投票

据我了解,大部分的差异是由于新创建的虚拟环境的供应方法不同造成的。

在2020年2月,20版本的 虚荣心 被发布,这是一个完整的重写。而随着它的到来,新的概念 叫做 播种机,这些定义了不同的方法来提供环境,即让诸如 pip设置工具 环境中可用。当前版本的 虚荣心 有两个播种机。

  • pip 这可能类似于 venv 和早期版本的 虚荣心 做。
  • 应用数据目前的默认播种机,使用了不同的机制,可能是速度提升的最大贡献者。

从文档中可以看出。

app-data - 这个方法使用用户应用程序数据目录来创建安装镜像。这些镜像只需要创建一次,后续的虚拟环境只需要将这些镜像链接复制到它们的纯python库路径中即可(该库的 site-packages 文件夹)。) 这使得除了第一次创建虚拟环境外,所有的虚拟环境创建速度都非常快(一个 pip 机制通常需要98%的virtualenv创建时间,所以通过创建这个我们可以直接链接到虚拟环境安装目录的安装镜像,我们可以实现速度的提升,在复制的情况下,可以将最初的1分10秒缩短到只有8秒,在有symlinks的情况下,可以缩短到0.8秒--这是在Windows上,LinuxmacOS上有symlinks的情况下,可以从3秒多低到100ms)。)

你也可以在这个讨论中阅读更多的技术细节。


1
投票

Virtualenv 20.x只是在袖子上做了一些优化和技巧,使其速度更快。venv 标准库模块没有这些,可能也不会有。

© www.soinside.com 2019 - 2024. All rights reserved.