当我使用Python 3.3时,是否需要安装Python包virtualenv?

35

我在Cristoph Gohlke的Python包中查找时,发现有一个适用于Python 3.3的Virtualenv 包。

由于标准 Python 库 v3.3 中已经有了一个venv包,我想知道单独安装这个包是否有优势。

编辑:根据virtualenv 1.8.2venv两个包的文档,我可以说venv标准库包缺乏以下功能:

  1. --no-site-packages选项
  2. 在setuptools或distribute之间进行选择
  3. 无法安装pip,因为它不在默认的Python安装中
  4. 无法自定义虚拟环境内的提示前缀--prompt=PROMPT

如果还有其他差异,我没有发现,请在此处写下。

3个回答

25
一般情况下,使用python3.3及以上版本时不需要virtualenv包,因为它已经通过PEP 405被纳入标准库。正如您在问题中提到的,最新版本的virtualenv和标准库中的venv包之间存在一些相对较小的差异。部分原因(例如--no-site-packages)是由于不同的实现方式。由于venv在标准库中,它不必像virtualenv那样跳过一些扭曲的步骤来创建一个自包含的Python安装,例如复制Python的大部分site模块。
最好的资源是仔细阅读PEP。

由于venv是Python标准库的一部分,因此它不必像某些扭曲的方法一样跳跃来实现某些功能。Venv是纯Python包,与任何第三方纯Python包(如virtualenv)相比,它没有访问Python的任何特殊部分的特权。 - Piotr Dobrogost
3
请看布雷特·坎农在PyCon13的演讲第14分钟 http://pyvideo.org/video/1730/python-33-trust-me-its-better-than-27。他说:“由于它现在直接集成到Python中,所以你可能已经习惯了遇到的许多边缘情况现在已经消失了,因为它是一个直接受支持的功能。” - Robert T. McGibbon

2

关于问题:

Python标准库中的venv是否需要虚拟环境包virtualenv?

(或者说它们有什么区别?)

  1. --no-site-packages在两个工具中都是默认设置。选项--system-site-packages存在,但存在问题
  2. distribute已被弃用...没有任何可看的内容
  3. 自Python3.4以来,ensurepip将在虚拟环境中提供pip。为了在Ubuntu/Debian上使其正常工作,请确保安装python3-venv软件包
  4. 这里没有任何变化

当venv首次发布时,我希望它进入维护模式,以提供有关“旧版Python的virtualenv”的错误修复,并且所有开发重心将转移到stdlib venv。我不确定virtualenv的项目目标/路线图,但我担心我所希望的并没有发生。因此,至少在短期内,我会继续使用原始的virtualenv。


1

pyvenv是Python 3.3和3.4创建虚拟环境的推荐工具。

从Python 3.5开始使用:

python3 -m venv

venv是一个内置模块,可以访问Python的内部功能。

pyvenv在3.6中已被弃用。

来源: https://docs.python.org/3/library/venv.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接