我们在开发 Python 项目的时候,不同的项目可能需要使用的 Python 版本和包是不一样的,如果我们在同一台机器上同时开发多个项目,这时就会出现包之间的冲突,为了解决这个问题,我们可以使用虚拟环境。
虚拟环境是 Python 的一个重要概念,它可以帮助我们在同一台机器上创建多个独立的 Python 运行环境,每个虚拟环境都有自己独立的 Python 解释器和包,这样就可以避免包之间的冲突。
Python 提供了 venv
模块来创建虚拟环境,我们可以使用 venv
模块来创建、激活和退出虚拟环境,下面我们就来看看如何使用 venv
模块。
创建虚拟环境
首先当然需要安装 Python,然后我们可以使用 venv
模块来创建虚拟环境,比如我们来创建一个名为 myenv
的虚拟环境:
python3 -m venv myenv
上面的命令表示使用 Python3 解释器的 venv
模块来创建一个名为 myenv
的虚拟环境,执行完毕后会在当前目录下创建一个 myenv
目录,这个目录就是我们的虚拟环境。
$ tree -L 2 myenv myenv ├── bin │ ├── Activate.ps1 │ ├── activate │ ├── activate.csh │ ├── activate.fish │ ├── pip │ ├── pip3 │ ├── pip3.12 │ ├── python -> python3.12 │ ├── python3 -> python3.12 │ └── python3.12 -> /Library/Frameworks/Python.framework/Versions/3.12/bin/python3.12 ├── include │ └── python3.12 ├── lib │ └── python3.12 └── pyvenv.cfg 5 directories, 11 files
这其实就是一个独立的 Python 运行环境,里面包含了一个独立的 Python 解释器和一些基本的包。
激活虚拟环境
要激活虚拟环境,我们可以执行 bin
目录下的 activate
脚本,比如在 Linux 或 macOS 下可以这样来激活虚拟环境:
source myenv/bin/activate
在 Windows 下可以这样来激活虚拟环境:
myenv\Scripts\activate.bat
激活虚拟环境后,我们可以看到命令行的提示符前面会有虚拟环境的名字,表示当前虚拟环境已经激活,这时我们安装的包都会安装到当前虚拟环境中,而不会影响到系统的 Python 环境。
$ source myenv/bin/activate (myenv) $
现在我们可以在虚拟环境中安装包,比如我们可以安装 Flask 包:
pip3 install Flask
安装完毕后,我们可以使用 pip list
命令来查看当前虚拟环境中安装的包:
(myenv) $ pip3 list Package Version ------------ ------- blinker 1.8.2 click 8.1.7 Flask 3.0.3 itsdangerous 2.2.0 Jinja2 3.1.4 MarkupSafe 2.1.5 pip 24.0 Werkzeug 3.0.3
这些包都是安装在当前虚拟环境中的,不会影响到系统的 Python 环境。
如果是 VSCode 的话,可以在 VSCode 中选择使用 ./myenv/bin/python
做为当前项目的虚拟环境,这样就可以在 VSCode 中使用虚拟环境中的 Python 解释器和包了。
退出虚拟环境
要退出虚拟环境,我们可以执行 deactivate
命令,比如在 Linux 或 macOS 下可以这样来退出虚拟环境:
deactivate
在 Windows 下可以这样来退出虚拟环境:
myenv\Scripts\deactivate
退出虚拟环境后,命令行的提示符前面就不会有虚拟环境的名字了,表示当前虚拟环境已经退出。
$ deactivate $
当然现在如果用 pip3 list
命令来查看当前环境中安装的包,就会发现当前环境中没有安装 Flask 包了,当前环境就是系统的 Python 环境。
删除虚拟环境
如果我们不再需要某个虚拟环境,可以直接删除对应的目录,比如我们可以这样来删除 myenv
虚拟环境:
rm -rf myenv
这样就可以删除虚拟环境了。
总结
不过 venv
模块只能创建 Python 3.3 以上版本的虚拟环境,而且只能使用系统自带的 Python 解释器来创建虚拟环境,如果我们的项目想使用不同版本的 Python 解释器,则可以使用其他的虚拟环境管理工具,比如 docker
、virtualenv
、conda
、pyenv
、Poetry
等,这些工具都可以用来创建虚拟环境,管理包依赖,但是使用方法可能会有所不同,大家可以根据自己的需求来选择。