尝试在vscode用venv方法和virtualvenv方法创建虚拟环境,创建成功并激活之后,虚拟环境的名称分别是绿色和灰色,只是颜色的不同,在vscode终端的提示符显示上有所差别。
venv
和 virtualenv
是两种不同的 Python 虚拟环境管理工具。
venv
是 Python 3.3+ 自带的标准库,用于创建和管理 Python 虚拟环境。在使用 venv
创建虚拟环境后,激活虚拟环境会修改终端的环境变量,将虚拟环境的 Python 解释器添加到 PATH
中,以及修改终端提示符的显示,使其显示当前激活的虚拟环境。
virtualenv
是第三方库,用于创建和管理 Python 虚拟环境。在使用 virtualenv
创建虚拟环境后,激活虚拟环境只会修改终端的环境变量,将虚拟环境的 Python 解释器添加到 PATH
中,而不会修改终端提示符的显示。
所以,在使用 virtualenv
创建的虚拟环境中,激活虚拟环境后,终端提示符的颜色不会改变,仍然是灰色。而在使用 venv
创建的虚拟环境中,激活虚拟环境后,终端提示符的颜色会改变为绿色,以提示当前处于激活的虚拟环境中。
无论是 venv
还是 virtualenv
创建的虚拟环境,都能够正常使用。只是在终端中的提示符显示上有所差别。
virtualenv
是一个独立的第三方库,它不会修改终端提示符的显示。它的作用是创建一个独立的Python环境,并将该环境与当前的终端会话关联起来,以便在该终端会话中使用该Python环境。在使用virtualenv
创建的虚拟环境中,激活虚拟环境后,终端提示符的显示不会改变,仍然是灰色。这是因为virtualenv
并没有提供直接修改终端提示符的功能。
venv
是 Python 内置的模块,它提供了创建和管理虚拟环境的功能。当你使用 venv
创建虚拟环境时,它会在虚拟环境的根目录下创建一个 activate
脚本,该脚本会在激活虚拟环境时被执行。
在 activate
脚本中,venv
会修改终端的环境变量,将当前虚拟环境的路径添加到 PATH
环境变量中,并修改 PS1
环境变量,即终端提示符的显示格式。通过修改 PS1
环境变量,venv
实现了改变终端提示符的显示。
在 Windows 系统中,PS1
环境变量控制着 PowerShell 终端的提示符显示,它的默认值是 $env:USERNAME $env:USERDOMAIN\$env:COMPUTERNAME $PWD>
。当你激活一个 venv
虚拟环境时,venv
会将 PS1
环境变量修改为包含虚拟环境名称的格式,例如 (venv) $env:USERNAME $env:USERDOMAIN\$env:COMPUTERNAME $PWD>
。这样,终端提示符的显示就能够反映当前所激活的虚拟环境。
需要注意的是,这种修改终端提示符的方式是特定于 PowerShell 终端的,其他终端可能使用不同的环境变量来控制提示符的显示。因此,在其他终端中使用 venv
创建的虚拟环境可能不会有相同的提示符显示变化。
venv
通过修改终端的提示符显示来改变颜色。在激活虚拟环境时,venv
会修改终端的环境变量,并将当前虚拟环境的路径添加到提示符中。终端根据这些环境变量来确定提示符的显示内容和样式,从而改变颜色。
具体来说,venv
会将当前虚拟环境的路径添加到环境变量PS1
中,PS1
是控制终端提示符显示的环境变量。添加的路径会被包裹在一对转义字符中,表示该路径应该显示为绿色。当终端读取PS1
的值时,会根据其中的转义字符来确定颜色。
例如,如果使用venv
创建的虚拟环境的路径是C:\path\to\venv
,那么在激活虚拟环境后,venv
会将PS1
的值修改为类似以下的形式:
\[\033[32m\](venv) \[\033[0m\]\w\[\033[0m\]$
其中\[\033[32m\]
表示开始绿色显示,\[\033[0m\]
表示结束颜色显示,\w
表示当前工作目录的路径。
终端读取修改后的PS1
的值,并根据其中的转义字符来确定提示符的显示内容和颜色。所以,当虚拟环境激活后,终端提示符的颜色会变为绿色,并显示(venv)
以及当前工作目录的路径。
virtualenv
在创建虚拟环境时会修改终端的环境变量,包括PATH
和PS1
(终端提示符的显示)。但与venv
不同的是,virtualenv
没有涉及终端提示符颜色的修改,因此在激活虚拟环境后,终端提示符的颜色仍然是灰色。而venv
会将终端提示符的颜色修改为绿色,以显示当前处于激活的虚拟环境中。这只是在终端显示上的区别,对于虚拟环境的功能和使用来说,并没有影响。