繁体   English   中英

Python venv和virtualenvwrapper相结合

[英]Python venv and virtualenvwrapper combined

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

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

我的问题是:

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

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

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

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

将此脚本附加到.bashrc / .bash_profile / .zshrc中,然后启用对venv的基本管理。

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

lsvenv(){
    ls $VENV_HOME
}
  1. 有没有办法使用virtualenvwrapper与venv?

是。 只需在您的venvs目录中指向WORKON_HOME即可。 这是我在~/.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. 这比仅仅创建一个来源激活的别名更好吗?

好吧,由你来决定你需要什么,但我发现virtualenvwrapper与zsh插件virtualenv和virtualenvwrapper相比非常好,比原始别名更好。

workon列出所有venvs是非常好的,然后workon speech_analyzer直接跳上它。

  1. 其他方案?

您还可以设置挂钩来激活目录更改中的venvs,但如果这就是您所追求的而且只是那个,那么这基本上就是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坚持20个项目的20个环境。 它只是不起作用,并创造了比它解决的更多的问题。 如果您目前拥有1:1的工作流程,那么pipenv可能就是您喜欢的工具。 需要注意的是,不过,你可以〜只做〜在pipenv做那个工作流程。

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

  1. 顾名思义, virtualenvwrapper专门用于包装virtualenv ,它取决于它。 我不相信任何人都有类似包裹的venv

  2. venv旨在完成创建虚拟环境的基本工作,但环境管理必须使用脚本完成。 虽然shell脚本通常是人们的第一手段,但venv模块有一个广泛的API来帮助您完成这些任务。

如今,创建Python虚拟环境有很多选择。 除了你提到的那些, anaconda允许创建和管理环境,甚至大部分时间都可以很好地使用pip

虚拟环境空间中的工具被设计为尽可能与标准的Python分发工具一起工作,但是venv在Python 3.5中的出现并没有使virtualenvvirtualenvwrapper无效,这两者应该仍然可以正常工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM