【问题标题】:Python venv and virtualenvwrapper combinedPython venv 和 virtualenvwrapper 结合
【发布时间】:2018-01-31 06:20:45
【问题描述】:

在 Python 3.5 中,推荐的创建虚拟环境的方法是使用 venv,而不是 virtualenv。还是python packaging tutorial mentions both tools.

不过,virtualenvwrapper 是推荐使用 virtualenv 时使用的包装工具。

那么我的问题是:

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

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

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

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

【问题讨论】:

  • @JBentley 您的假设完全正确。我以为我很清楚,但我想不是。很高兴有人知道了 :) 我还要补充一点,随着 pipenv 的引入,这个问题不再那么重要了。
  • @user1853417,您能解释一下您的用例和工作流程吗?我很好奇为什么在你的情况下 pipenv 等同于 venv + virtualenvwrapper。这些工具,pipenv vs venv/virtualenv+wrapper,解决了两个截然不同的问题。

标签: python python-3.x virtualenv virtualenvwrapper python-venv


【解决方案1】:

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

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

lsvenv(){
    ls $VENV_HOME
}

【讨论】:

  • 不回答问题。可以说仍然有用的信息。也许作为评论发布,或将其扩展为完整答案并将其作为替代解决方案?
  • 我目前正在使用这个脚本,对管理虚拟环境很有帮助。虽然我得到了两个反对票,但我还是把它留在这里,以防它可以帮助其他人......
【解决方案2】:
  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 列出所有 venv 非常好,然后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 中执行该工作流。

【讨论】:

    【解决方案3】:

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

    1. 顾名思义,virtualenvwrapper 专门设计用于 包装virtualenv,这取决于它。我不相信任何人 venv 已经被类似地包裹了。

    2. venv旨在做创建虚拟的基础工作 环境,但环境管理必须与 脚本。虽然 shell 脚本通常是人们的第一个 度假村,venv 模块有一个广泛的 API 来帮助你 那些任务。

    如今,创建 Python 虚拟环境有很多选择。除了你提到的那些,anaconda 允许创建和管理环境,甚至在大多数情况下与pip 配合得很好。

    虚拟环境空间中的工具已被设计为尽可能与标准 Python 分发工具一起使用,但 Python 3.5 中 venv 的到来并未使 virtualenvvirtualenvwrapper 失效,这应该两者都可以正常工作。

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

    【讨论】:

    • 事实上this question 给出了更完整的问题描述。
    • 与另一个答案相比,我更不愿意对这个答案投反对票,因为它更接近相关,但它可以通过改进来更全面地回答这个问题。从这个答案中不清楚virtualenvwrapper 是否可以包装venv,我认为这是 OP 正在解决的主要问题(参见他编号的问题 1)。换句话说,它是(1)virtualenvwrapper+virtualenv之间的二元选择吗?或(2)venv(没有virtualenvwrapper)?还是有一个选项(3)virtualenvwrapper + venv
    • @JBentley 您的假设完全正确。我以为我很清楚,但我想不是。很高兴有人知道了 :) 我还要补充一点,随着 pipenv 的引入,这个问题不再那么重要了。
    • pipenv 使用 virtualenv 来达到它的目的。所以我认为 virtualenvwrapper + venv 的问题仍然存在。但是从 virtualenvwrapper 的文档和存储库来看,我认为情况并非如此。
    • @user1853417 pipenv 非常糟糕,被过度营销,并且无法解决 venv 和 virtualenv 所做的任何问题。不要像许多人那样将其作为替代品来推广。它只做一件事,部署依赖管理,但即便如此,它也做得很糟糕。我希望 python 社区可以规范这些东西并改进可怕的打包做法,但在那之前,pipenv 不是答案。使用 venv 或 virtualenv 进行开发,使用 conda/docker 进行部署,使用 pyinstaller 发送给奶奶。 chriswarrick.com/blog/2018/07/17/…
    猜你喜欢
    • 2013-04-13
    • 2017-05-25
    • 2013-08-23
    • 1970-01-01
    • 2019-05-24
    • 2017-08-24
    • 2021-10-04
    相关资源
    最近更新 更多