一尘不染

venv,pyvenv,pyenv,virtualenv,virtualenvwrapper,pipenv等有什么区别?

python

Python 3.3在其标准库中包含了新软件包venv。它有什么作用?与似乎与regex匹配的所有其他软件包(py)?(v|virtual|pip)?env有何不同?


阅读 643

收藏
2020-02-23

共1个答案

一尘不染

PyPI软件包不在标准库中

virtualenv是一个非常流行的工具,可为Python库创建隔离的Python环境。如果你不熟悉此工具,我强烈建议你学习它,因为它是非常有用的工具,在本答案的其余部分中,我将对其进行比较。

它的工作原理是在目录(例如:)中安装一堆文件env/,然后修改PATH环境变量以在其之前添加自定义bin目录(例如:)env/bin/。在完全相同的副本pythonpython3二进制文件放在这个目录中,但是Python编程寻找相对于其路径优先库,环境中的目录。它不是Python标准库的一部分,但是受到PyPA(Python包装管理局)的正式祝福。激活后,你可以使用在虚拟环境中安装软件包pip。

pyenv用于隔离Python版本。例如,你可能想针对Python 2.6、2.7、3.3、3.43.5测试代码,因此需要一种在它们之间切换的方法。一旦被激活,它的前缀PATH与环境变量~/.pyenv/shims,那里有专用的文件相匹配的Python命令(python,pip)。这些不是Python附带命令的副本。它们是特殊的脚本,它们可以根据PYENV_VERSION环境变量,.python-version文件或~/.pyenv/version文件动态地决定要运行哪个版本的Python 。pyenv使用命令,还可以简化下载和安装多个Python版本的过程pyenv install

pyenv-virtualenv是一个插件pyenv由同一作者的pyenv,允许你使用pyenvvirtualenv在同一时间方便。但是,如果你使用的是Python 3.3或更高版本,请pyenv-virtualenv尝试运行python -m venv它(如果有),而不是virtualenv。如果你不希望使用便利功能,则可以在不使用的情况下一起使用virtualenv和。pyenvpyenv-virtualenv

virtualenvwrapper是的一组扩展virtualenv(请参阅docs)。它为你提供,等命令mkvirtualenv,lssitepackages尤其是workon在不同virtualenv目录之间切换时。如果要多个virtualenv目录,此工具特别有用。

pyenv-virtualenvwrapper是pyenv与作者相同的插件pyenv,可以方便地集成virtualenvwrapperpyenv

pipenvKenneth Reitz(的作者requests)撰写的,是此列表中的最新项目。它旨在结合Pipfilepip并virtualenv为在命令行一个命令。该virtualenv目录通常放置在中~/.local/share/virtualenvs/XXX,XXX是项目目录路径的哈希值。这与不同virtualenv,后者的目录通常位于当前工作目录中。

《 Python打包指南》建议pipenv在开发Python应用程序(与库相对)时使用。似乎没有任何计划来venv代替virtualenv(#15)。令人困惑的是,它的命令行选项–venv引用的是 virtualenv目录,而不是目录,venv同样,环境变量PIPENV_VENV_IN_PROJECT会影响virtualenv目录的位置 ,而不是venv目录(#1919)。

标准库:

pyvenv是Python 3附带的脚本,但在Python 3.6中已弃用,因为它有问题(更不用说混乱的名称了)。在Python 3.6及更高版本中,确切的等效项是python3 -m venv

venv是Python 3随附的软件包,你可以使用它运行python3 -m venv(尽管出于某些原因,某些发行版将其分成了单独的发行版软件包,例如python3-venvUbuntu / Debian上)。它的作用与相似virtualenv,并且工作方式非常相似,但是不需要复制Python二进制文件(Windows除外)。如果你不需要支持Python 2,请使用此功能。在撰写本文时,Python社区似乎对此很满意,virtualenv并且我还没有听到太多谈论venv

这些工具大多相互补充。例如,pipenv集成pipvirtualenv即使pyenv需要的话。和彼此真正替代的唯一工具是venvvirtualenv

给初学者的建议

这是我对初学者的个人建议:首先学习virtualenvpip,这些工具可在各种情况下与Python 2和3一起使用,并在需要它们时选择其他工具。

2020-02-23