使用 venv 时是否需要激活虚拟环境?

9
在Mac上使用Python 3.7.0。尝试使用自Python 3.4之后添加的venv模块。我使用python3 venv -m path/to/my/dir设置了我的虚拟环境,我的问题是我需要激活这个虚拟环境才能使用吗? 文档似乎暗示我不需要?引用如下:

您不需要专门激活环境;激活只是将虚拟环境的二进制目录前置到路径中,以便“python”调用虚拟环境的Python解释器,并且可以运行安装的脚本而无需使用完整路径。但是,在虚拟环境中安装的所有脚本都应该可以在不激活它的情况下运行,并自动使用虚拟环境的Python。

如果我不必激活,那么将venv前置到二进制目录有什么好处?这不是无论如何都必须发生才能使venv起作用吗?


不需要。在Python 3.7中,你和之前的版本一样都不需要这么做。 - Martijn Pieters
我认为关键短语是“在虚拟环境中安装的脚本应该可以在不激活它的情况下运行”。 - chepner
1个回答

15

启用虚拟环境为您提供了方便,但并非必须。

即使对于已配置为使用 #!/usr/bin/env python 运行的脚本(它会在您的路径上查找 python 可执行文件),您也可以手动更新 PATH 环境变量:

$ PATH="/path/to/venv/bin" some_script

激活虚拟环境可以使得 PATH 的更新保持有效,直到你再次取消激活,这很方便。

例如,我经常同时使用几个虚拟环境。其中一些仅用于安装我已经链接到 ~/bin/ 目录的一些命令行工具,另一个则用于 Jupyter 笔记本,还有两个用于快速验证不同 Python 版本的代码片段,并且可以访问第三方库。我没有激活它们中的任何一个。

当你 激活虚拟环境时,唯一发生的事情是您的终端 PATH 变量未被更新以将虚拟环境的 bin 目录放在首位,因此当你在终端输入 pythonpip 或其他没有路径的脚本时,shell 将找到另一个 Python 二进制文件来运行。您始终可以通过给出该命令的完整路径来使用虚拟环境中的任何命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接