当前位置: 首页 > 面试题库 >

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

诸葛茂勋
2023-03-14
问题内容

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


问题答案:

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一起使用,并在需要它们时选择其他工具。



 类似资料:
  • Python3.3在其标准库中包含新的包。它是做什么的,它与似乎与regex匹配的所有其他包有什么不同?

  • 问题内容: 我是一个试图学习python的红宝石程序员。我很喜欢pyenv,因为它就像是rbenv的复制和粘贴。Pyenv帮助在系统中拥有多个版本的python,并且在不接触系统敏感部分的情况下隔离python。 我想每个python安装都带有pip包。我仍然不明白的是,有很多好的python库建议使用此virtualenv和anaconda。我什至可以找到pyenv的virtualenv插件。

  • 问题内容: 我最近学习了如何在工作流程中使用virtualenv和virtualenvwrapper,但是我在一些指南中看到了pyenv,但是我似乎无法理解pyenv是什么以及它与virtualenv有何不同/相似。pyenv是virtualenv的更好/更新的替代品还是免费的工具?如果后者有什么不同之处,以及两者(以及适用的virtualenvwrapper)如何一起工作? 问题答案: Pyen

  • 在Python 3.5中,创建虚拟环境的推荐方法是使用venv,而不是virtualenv。不过,python打包教程也提到了这两个工具。 null venv的推出在一定程度上是对这种混乱的回应。如果你想帮助改善这种情况,我建议你使用venv,并鼓励其他人也这样做 因此鼓励使用Venv。但正如这个问题所暗示的,如果要使用venv,如何使用像virtualenvwrapper这样的包装器

  • 问题内容: 据我对Docker的了解,它是用于虚拟环境的工具。用他们的术语来说,它叫做“容器化”。这或多或少是Python的virtualenv所做的。但是,您可以 在 Docker中使用virtualenv 。那么,它是虚拟环境内部的虚拟环境吗?我对这甚至如何工作感到困惑,所以有人可以澄清一下吗? 问题答案: virtualenv仅封装Python依赖项。Docker容器封装了 整个OS 。 借

  • 我在使用pyenv创建虚拟环境时遇到了一些麻烦。 这很好: 但是,当我创建一个虚拟环境(我假设是用Python 3.6.0完成的)并激活它时,我得到的是python3.7.4。如果我使用,情况也是一样的。 用语言来说,我想创建一个虚拟环境,其版本与当前通过pyenv激活的版本相同。我在这里错过了什么? 我的系统的一些信息: 我使用的是苹果操作系统。 我通过自制安装了Python 3.7.4,它是的