创建 Python 虚拟环境的"virtualenv"和"-m venv"有什么区别



对不起,如果我听起来有点愚蠢。 我对此感到困惑: 两者之间有什么区别:

virtualenv myvenv

-m venv myvenv

第一个在创建虚拟环境时对我来说效果很好,而另一个则不然。

cd我的开发目录并使用virtualenv myvenv,它创建了虚拟环境。但是如果我使用-m venv myvenv,它只会给出错误。

venv是 Python 3 直接附带的软件包。所以你不需要pip install任何东西。

相反,Virtualenv是一个独立的库,可在 https://virtualenv.pypa.io/en/stable/上使用,并且可以与pip一起安装。

他们解决同样的问题,并以非常相似的方式工作。

如果您使用 python3,我建议避免任何"额外"依赖项,并坚持使用venv

你的错误可能是因为你使用了Python2/pip2。

我认为virtualenv文档对此进行了最好的解释:

venv是自 Python 3.3 以来集成到标准库中的virtualenv子集。该子集意味着只有部分virtualenv功能在venv

  • venv可能会更慢,因为它没有"app-data种子方法"。在文档中查看有关虚拟环境播种机的更多信息。
  • venv只能通过升级 Python 版本来更新,而virtualenv则使用 pip 进行更新。
  • venv不可扩展
  • virtualenv具有更丰富的编程API(描述虚拟环境而不创建它们)。请参阅此处的venvAPI。
  • venv无法自动发现任意安装的 python 版本,而virtualenv可以。这意味着,如果您想使用 PATH 中的第一个版本以外的其他 python 版本,则必须使用venv指定python可执行文件的完整路径。使用virtualenv,您可以只提供版本号。请参阅 virtualenv 文档中的 python 发现。

对我来说,差异非常微妙,唯一实际的区别是venv包含在标准库中(自 3.3 以来)。我已经使用python -m venv venv很长时间了,从不需要替代品。

最新更新