我已经在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
为什么它们的性能不一样?
据我了解,大部分的差异是由于新创建的虚拟环境的供应方法不同造成的。
在2020年2月,20版本的 虚荣心 被发布,这是一个完整的重写。而随着它的到来,新的概念 叫做 播种机,这些定义了不同的方法来提供环境,即让诸如 pip 和 设置工具 环境中可用。当前版本的 虚荣心 有两个播种机。
从文档中可以看出。
app-data
- 这个方法使用用户应用程序数据目录来创建安装镜像。这些镜像只需要创建一次,后续的虚拟环境只需要将这些镜像链接复制到它们的纯python库路径中即可(该库的site-packages
文件夹)。) 这使得除了第一次创建虚拟环境外,所有的虚拟环境创建速度都非常快(一个pip
机制通常需要98%的virtualenv创建时间,所以通过创建这个我们可以直接链接到虚拟环境安装目录的安装镜像,我们可以实现速度的提升,在复制的情况下,可以将最初的1分10秒缩短到只有8秒,在有symlinks的情况下,可以缩短到0.8秒--这是在Windows上,LinuxmacOS上有symlinks的情况下,可以从3秒多低到100ms)。)
你也可以在这个讨论中阅读更多的技术细节。
Virtualenv 20.x只是在袖子上做了一些优化和技巧,使其速度更快。venv
标准库模块没有这些,可能也不会有。