【问题标题】:What's the difference between "virtualenv" and "-m venv" in creating Virtual environments(Python)创建虚拟环境(Python)中的“virtualenv”和“-m venv”有什么区别
【发布时间】:2017-10-20 20:57:06
【问题描述】:

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

-m venv myvenv
第一个对我来说非常适合创建虚拟环境,而另一个则不行。
我将 CD 放入我的开发目录并使用“virtualenv myvenv”,它会创建虚拟环境。但是如果我使用“-m venv myvenv”它只会给出错误。请帮我理解

【问题讨论】:

  • 您需要使用python -m venv myvenv 才能工作...,其中python -m 调用venv 模块作为脚本并将myvenv 作为参数传递给该脚本。

标签: python virtualenv


【解决方案1】:

我认为virtualenv docs 解释得最好:

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

  • venv 可能会更慢,因为它没有“app-data 种子方法”
  • venv 仅通过升级 Python 版本进行升级,virtualenv 使用 pip 进行升级。
  • venv 不可扩展
  • virtualenv 有更丰富的programmatic API(描述虚拟环境而不创建它们)。请参阅venv API here
  • venv 不能自动发现任意安装的 python 版本,而 virtualenv 可以。这意味着,对于venv,如果您想使用除PATH 中的第一个版本之外的其他python 版本,您必须指定python 可执行文件的完整路径。使用virtualenv,您只需提供版本号即可。请参阅 virtualenv 文档中的 python discovery

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

【讨论】:

  • 最后一部分确实感觉它不是真的有效吗?如果我有 x 个 python 版本,我仍然可以使用完整路径直接调用任何这些 python,并为该特定解释器获取正确的运行时路径。所以,用那个随机的python制作一个“venv”只需要我知道那个python在哪里,比如~/localcopies/python/3.7.7/python -mvenv myproject..
  • 是的,我同意。在 virtualenv 文档中这有点误导。不同之处在于 python 版本的自动发现。我编辑了答案。
【解决方案2】:

venv 是python 3 直接附带的一个包。所以你不需要pip install 任何东西。

virtualenvhttps://virtualenv.pypa.io/en/stable/ 提供的独立库,可以使用pip 安装。

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

如果您使用 python3,我建议您避免“额外”依赖并坚持使用venv

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

【讨论】:

  • 谢谢你。如果我删除当前的 python 安装并在我的 PC 上重新安装 Python 3.5 会解决这个问题吗?
  • 是的,可能,但如果你给我具体的错误,我可以更准确地告诉你。但是,如果您更喜欢使用 python2,您可以使用 virtualenv,这与 venv 几乎相同
  • 谢谢。我在“-m venv”之前缺少“python”。现在我明白了其中的区别。
猜你喜欢
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2019-01-29
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多