[英]Python venv and virtualenvwrapper combined
在Python 3.5中,创建虚拟环境的推荐方法是使用venv ,而不是virtualenv 。 python包装教程仍然提到了这两种工具。
但是, virtualenvwrapper是使用virtualenv时使用的推荐包装工具。
我的问题是:
编辑:我可以看到我的问题的答案有一些混乱。 venv是Python官方版本的virtualenv,如上面的链接所述。 多个堆栈溢出问题表明应该使用venv。 如“重复”中所述,您建议:
venv的引入部分是对这一混乱的回应。 如果你想帮助改善这种情况,我建议你使用venv并鼓励其他人也这样做
所以鼓励使用venv。 但正如这个问题所暗示的那样,如果要使用venv,那么如何使用像virtualenvwrapper这样的包装器
将此脚本附加到.bashrc / .bash_profile / .zshrc中,然后启用对venv的基本管理。
此外,您可以通过添加以下行来扩展脚本,以便它还显示现有的venv列表。
lsvenv(){
ls $VENV_HOME
}
- 有没有办法使用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
- 或者甚至可以考虑由于venv而不需要virtualenvwrapper? (我看不出这是怎么回事,因为它是解决另一个问题的包装器)
venv == virtualenv(简而言之)。 venv并没有取代virtualenvwrapper,因为virtualenv取代了它。 你对此的预感是正确的。
- 这比仅仅创建一个来源激活的别名更好吗?
好吧,由你来决定你需要什么,但我发现virtualenvwrapper与zsh插件virtualenv和virtualenvwrapper相比非常好,比原始别名更好。
workon
列出所有venvs是非常好的,然后workon speech_analyzer
直接跳上它。
- 其他方案?
您还可以设置挂钩来激活目录更改中的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中处理虚拟环境的不同工具。 他们都有自己的问题,康达也是如此,它有一个更为复杂的“环境”概念。
顾名思义, virtualenvwrapper
专门用于包装virtualenv
,它取决于它。 我不相信任何人都有类似包裹的venv
。
venv
旨在完成创建虚拟环境的基本工作,但环境管理必须使用脚本完成。 虽然shell脚本通常是人们的第一手段,但venv
模块有一个广泛的API来帮助您完成这些任务。
如今,创建Python虚拟环境有很多选择。 除了你提到的那些, anaconda
允许创建和管理环境,甚至大部分时间都可以很好地使用pip
。
虚拟环境空间中的工具被设计为尽可能与标准的Python分发工具一起工作,但是venv
在Python 3.5中的出现并没有使virtualenv
或virtualenvwrapper
无效,这两者应该仍然可以正常工作。
venv
模块主要是一个简单的工具包,允许在程序内部创建virtualenvs,并不打算取代virtualenvwrapper
的便利性。 它只是满足了一系列不同的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.