在Python 3.5中,创建虚拟环境的推荐方法是venv,而不是virtualenv。仍然是python packaging tutorial mentions both tools.
但是,使用virtualenv时,virtualenvwrapper是推荐使用的包装工具。
我的问题是:
编辑:我可以看到我的问题的答案存在一些混乱。 venv是Python官方版本的virtualenv,如上面的链接所述。多个堆栈溢出问题表明应该使用venv。正如您所建议的“重复”中所述:
venv的引入部分是对这一混乱的回应。如果你想帮助改善这种情况,我建议你使用venv并鼓励其他人做同样的事情
所以鼓励使用venv。但正如这个问题所暗示的,如果要使用venv,那么如何使用像virtualenvwrapper这样的包装器
答案 0 :(得分:1)
在{.bashrc / .bash_profile / .zshrc中附加This script,然后对venv进行基本管理。
此外,您可以通过添加以下行来扩展脚本,使其也显示现有的venv列表。
lsvenv(){
ls $VENV_HOME
}
答案 1 :(得分:0)
顾名思义,virtualenvwrapper
是专门设计的
包裹virtualenv
,它取决于它。我不相信任何人
同样包裹了venv
。
venv
旨在完成创建虚拟的基本工作
环境,但环境管理必须完成
脚本。虽然shell脚本通常是人们的第一个
求助,venv
模块有一个广泛的API来帮助您
那些任务。
如今,创建Python虚拟环境有很多选择。除了你提到的那些,anaconda
允许创建和管理环境,甚至可以在大多数情况下与pip
很好地协作。
虚拟环境空间中的工具设计为尽可能与标准Python分发工具一起使用,但{3}}在Python 3.5中的到达并未使venv
或{{无效1}},这两者都应该可以正常工作。
virtualenv
模块主要是一个简单的工具包,允许在程序中创建virtualenvs,绝不是为了取代virtualenvwrapper
的便利性。它只是满足了一系列不同的需求。
答案 2 :(得分:0)
- 是否可以通过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
- 或者甚至可以考虑由于venv不需要virtualenvwrapper吗? (我看不出这是怎么回事,因为这是一个包装器,可以解决另一个问题)
venv == virtualenv(简而言之)。 venv不会取代virtualenvwrapper,这是因为virtualenv会取代它。您对此的预感是正确的。
- 这比仅仅创建一个用于激活的别名更好吗?
好吧,这取决于您自己确定什么,但是我发现带有zsh插件virtualenv和virtualenvwrapper的virtualenvwrapper非常好,并且比原始别名更好。
workon
列出所有venv非常好,然后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中完成该工作流程。