我在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是通过自制程序安装的。
即使使用--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
为什么它们的性能不一样?
答案 0 :(得分:2)
据我了解,大多数差异是由于提供新创建的虚拟环境所使用的方法不同。
2020年2月,发布了 virtualenv 的第20版,完全重写了该版本。随之而来的是新概念called seeders,它们定义了用于提供环境的不同方法,即使诸如 pip 和 setuptools 之类的东西在环境中可用。当前版本的 virtualenv 具有两个播种器:
从文档中:
app-data
-此方法使用用户应用程序数据目录创建安装映像。这些映像仅需要创建一次,随后的虚拟环境只需将这些映像链接/复制到其纯python库路径(site-packages
文件夹)中。这使得除了第一次虚拟环境创建之外的所有工作都可以快速进行(pip
机制通常占用了virtualenv创建时间的98%,因此,通过创建此安装映像,我们可以将其链接到虚拟环境安装目录中,从而可以在进行复制的情况下,将最初的1分钟10秒的剃须速度降低至仅8秒,如果有符号链接,则可缩短至0.8秒-在Windows,Linux / macOS上具有符号链接的情况下,从3秒钟起可降低至100ms )。
在此讨论中,您还可以阅读更多技术细节:
答案 1 :(得分:0)
Virtualenv 20.x只是进行了优化和欺骗,使其变得更快; venv
标准库模块没有这些,并且可能也不会得到它们。