use*_*417 15 python virtualenv virtualenvwrapper python-3.x python-venv
在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
}
Run Code Online (Sandbox Code Playgroud)
- 有没有办法在 venv 中使用 virtualenvwrapper?
是的。只需指向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
Run Code Online (Sandbox Code Playgroud)
- 或者甚至可以考虑由于 venv 而不需要 virtualenvwrapper?(我看不出这是怎么回事,因为它是解决另一个问题的包装器)
venv == virtualenv(简而言之)。venv 不会取代 virtualenvwrapper 的原因与 virtualenv 取代它的原因相同。你对此的预感是正确的。
- 这比制作一个别名来获取激活有什么好处?
好吧,这取决于您来确定您需要什么,但我发现带有 zsh 插件 virtualenv 和 virtualenvwrapper 的 virtualenvwrapper 非常棒,并且比原始别名更好。
workon列出所有 venvs 非常好,然后workon speech_analyzer直接进入它。
- 其他解决方案?
您还可以设置挂钩以在目录更改时激活 venv,但如果这就是您所追求的并且仅此而已,那么这本质上就是 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 年 7 月 8 日:读者可能会发现这个答案更全面地描述了在 Python 中处理虚拟环境的不同工具。他们都有自己的问题,就像 conda 一样,它有一个更复杂的“环境”概念。]
顾名思义,它virtualenvwrapper是专门为包装而设计的virtualenv,这取决于它。我不相信有人venv已经完成了类似的包装。
venv旨在完成创建虚拟环境的基本工作,但环境管理必须通过脚本来完成。尽管 shell 脚本通常是人们的首选,但该venv模块具有广泛的 API 可以帮助您完成这些任务。
如今创建 Python 虚拟环境有很多选择。除了您提到的那些之外,anaconda还允许创建和管理环境,甚至在pip大多数情况下都可以很好地工作。
虚拟环境空间中的工具被设计为尽可能与标准 Python 分发工具一起工作,但venvPython 3.5 的到来并没有使virtualenv或失效virtualenvwrapper,它们应该仍然可以正常工作。
该venv模块主要是一个简单的工具包,允许在程序内部创建 virtualenvs,并且绝不是为了取代virtualenvwrapper. 它只是满足了一组相当不同的需求。
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |