Python 3.3在其标准库中包含了新软件包venv
。它有什么作用?与似乎与regex
匹配的所有其他软件包(py)?(v|virtual|pip)?env
有何不同?
PyPI软件包不在标准库中:
virtualenv
是一个非常流行的工具,可为Python库创建隔离的Python环境。如果你不熟悉此工具,我强烈建议你学习它,因为它是非常有用的工具,在本答案的其余部分中,我将对其进行比较。
它的工作原理是在目录(例如:)中安装一堆文件env/
,然后修改PATH环境变量以在其之前添加自定义bin目录(例如:)env/bin/
。在完全相同的副本python
或python3
二进制文件放在这个目录中,但是Python编程寻找相对于其路径优先库,环境中的目录。它不是Python标准库的一部分,但是受到PyPA(Python包装管理局)的正式祝福。激活后,你可以使用在虚拟环境中安装软件包pip。
pyenv用于隔离Python版本。例如,你可能想针对Python 2.6、2.7、3.3、3.4
和3.5
测试代码,因此需要一种在它们之间切换的方法。一旦被激活,它的前缀PATH与环境变量~/.pyenv/shims
,那里有专用的文件相匹配的Python命令(python,pip
)。这些不是Python附带命令的副本。它们是特殊的脚本,它们可以根据PYENV_VERSION
环境变量,.python-version
文件或~/.pyenv/version
文件动态地决定要运行哪个版本的Python 。pyenv使用命令,还可以简化下载和安装多个Python版本的过程pyenv install
。
pyenv-virtualenv
是一个插件pyenv由同一作者的pyenv,允许你使用pyenv
和virtualenv
在同一时间方便。但是,如果你使用的是Python 3.3或更高版本,请pyenv-virtualenv
尝试运行python -m venv
它(如果有),而不是virtualenv
。如果你不希望使用便利功能,则可以在不使用的情况下一起使用virtualenv
和。pyenvpyenv-virtualenv
virtualenvwrapper
是的一组扩展virtualenv
(请参阅docs)。它为你提供,等命令mkvirtualenv,lssitepackages
尤其是workon
在不同virtualenv
目录之间切换时。如果要多个virtualenv目录,此工具特别有用。
pyenv-virtualenvwrapper
是pyenv与作者相同的插件pyenv,可以方便地集成virtualenvwrapper
到pyenv
。
pipenvKenneth Reitz
(的作者requests)撰写的,是此列表中的最新项目。它旨在结合Pipfile
,pip并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-venv
在Ubuntu / Debian
上)。它的作用与相似virtualenv
,并且工作方式非常相似,但是不需要复制Python二进制文件(Windows
除外)。如果你不需要支持Python 2,请使用此功能。在撰写本文时,Python社区似乎对此很满意,virtualenv
并且我还没有听到太多谈论venv
。
这些工具大多相互补充。例如,pipenv
集成pip
,virtualenv
即使pyenv
需要的话。和彼此真正替代的唯一工具是venv
和virtualenv
。
给初学者的建议:
这是我对初学者的个人建议:首先学习virtualenv
和pip
,这些工具可在各种情况下与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,它是的