21

在 Python 3.5 中,推荐的创建虚拟环境的方法是使用venv而不是virtualenvpython 打包教程仍然提到了这两种工具。

但是virtualenvwrapper是使用 virtualenv 时推荐使用的包装器工具。

我的问题是:

  1. 有没有办法将 virtualenvwrapper 与 venv 一起使用?
  2. 或者甚至可以考虑由于 venv 而不需要 virtualenvwrapper?(我看不出这是怎么回事,因为它是解决另一个问题的包装器)

编辑:我可以看到我的问题的答案有些混乱。venv 是 Python 的 virtualenv 官方等价物,如上面的链接中所述。多个堆栈溢出问题表明应该使用 venv。正如您建议的“重复”中所述:

venv 的引入部分是对这种混乱的回应。如果您想帮助改善情况,我建议您使用 venv 并鼓励其他人也这样做

所以鼓励使用venv。但是正如这个问题所暗示的那样,如果要使用 venv 如何使用像 virtualenvwrapper 这样的包装器

4

3 回答 3

9

这是一个自定义但仍然干净清晰的解决方案。将此脚本附加到 .bashrc / .bash_profile / .zshrc 中,它将为您提供基本的 venv 管理。

此外,您可以通过添加以下行来扩展脚本,以便它也显示现有的 venv 列表。

lsvenv(){
    ls $VENV_HOME
}
于 2018-07-27T16:46:50.727 回答
7
  1. 有没有办法将 virtualenvwrapper 与 venv 一起使用?

是的。只需指向WORKON_HOME您的 venvs 目录。这是我在我的. 中所做的~/.zshrc,我混合使用了 virtualenv(现在很少见,只是为了满足一些遗留的 py2 需求)和 venv(最常见)。我将默认值重命名为 .venvs 以明确这些主要是 Python 3 venvs 而不是 virtualenvs。

# Python Environment Handling
export WORKON_HOME=$HOME/.venvs  # Default name changed from virtualenv to highlight I am using python3 -m venv (aka pyvenv)
export PROJECT_HOME=$HOME/dev
source /usr/local/bin/virtualenvwrapper.sh  # symlinked to /Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh
  1. 或者甚至可以考虑由于 venv 而不需要 virtualenvwrapper?(我看不出这是怎么回事,因为它是解决另一个问题的包装器)

venv == virtualenv(简而言之)。venv 不会取代 virtualenvwrapper,原因与 virtualenv 取代它的原因相同。你对此的预感是正确的。

  1. 这比仅仅创建一个来源激活的别名更好吗?

好吧,由你决定你需要什么,但我发现带有 zsh 插件 virtualenv 和 virtualenvwrapper 的 virtualenvwrapper 非常好,并且比原始别名更好。

workon列出所有 venvs 非常好,然后workon speech_analyzer直接进入它。

  1. 其他解决方案?

您还可以设置挂钩以在目录更改时激活 venvs,但如果这就是您所追求的并且仅此而已,那么这本质上就是 pipenv。如果这就是你想要做的,那么 Pipenv 很棒。Pipenv 也有一个有趣且有前途的锁文件功能,但它对于开发来说太慢了,而且对于生产中的问题也太不成熟,目前无法评论。

但我从不喜欢每个项目工作流程的 1:1 环境,原因与此处给出的相同:https ://chriswarrick.com/blog/2018/07/17/pipenv-promises-a-lot-delivers-very-little /。特别是这些需求与我的多项目单一环境一致:https ://chriswarrick.com/blog/2018/07/17/pipenv-promises-a-lot-delivers-very-little/#nikola

我的机器上有六个环境和大约 20 个项目。Pipenv 没有扩展到那种情况。Pipenv 坚持为 20 个项目提供 20 个环境。它只是不起作用,并且产生的问题多于它解决的问题。如果您目前确实有 1:1 的工作流程,那么 pipenv 可能是您想要的工具。需要注意的是,不幸的是,您只能在 pipenv 中执行该工作流程。

于 2019-07-08T12:04:27.373 回答
0

[编辑,19 年 7 月 8 日:读者可能会发现这个答案更全面地描述了在 Python 中处理虚拟环境的不同工具。他们都有自己的问题,conda 也是如此,它有一个更复杂的“环境”概念。]

  1. 顾名思义,它virtualenvwrapper是专门为 wrap 设计的virtualenv,它依赖于它。我不相信有人有类似的包装venv

  2. venv旨在做创建虚拟环境的基本工作,但环境管理必须通过脚本来完成。尽管 shell 脚本通常是人们的首选,但该venv模块有一个广泛的 API 可以帮助您完成这些任务。

现在有很多创建 Python 虚拟环境的选项。除了您提到anaconda的那些之外,它还允许创建和管理环境,甚至在大多数情况下都能很好地工作pip

虚拟环境空间中的工具已被设计为尽可能与标准 Python 分发工具一起使用,但是venvPython 3.5 的到来并没有使virtualenv或失效virtualenvwrapper,它们应该仍然可以正常工作。

venv模块主要是一个简单的工具包,允许在程序中创建 virtualenvs,绝不是要取代virtualenvwrapper. 它只是满足了一组完全不同的需求。

于 2017-08-22T22:04:32.103 回答