1. 虚拟环境基础
Python 应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库 , 因为应用程序可能需要修复特定的错误 , 或者可以使用库的过时版本的接口编写应用程序。
这意味着一个 Python 环境可能无法满足每个应用程序的要求。如果应用程序 A 需要特定模块的 1.0 版本 , 但应用程序 B 需要 2.0 版本 , 则需求存在冲突 , 安装版本 1.0 或 2.0 将导致某一个应用程序无法运行。
这个问题的解决方案是创建一个 virtual environment , 一个目录树 , 其中安装有特定Python版本 , 以及许多其他包。
然后 , 不同的应用将可以使用不同的虚拟环境。 要解决先前面例子中的冲突 , 应用程序 A 可以拥有自己的安装了 1.0 版本的虚拟环境 , 而应用程序 B 则拥有安装了 2.0 版本的另一个虚拟环境。 如果应用程序 B 要求将某个库升级到 3.0 版本 , 也不会影响应用程序 A 的环境。
比如在同一个Python环境下运行三个项目 , 这三个项目都用到了pymysql三方库 , 但是需要的版本都不一样 , 运行项目就得下载指定版本的pymysql , 运行另一个项目时就得把之前的版本卸载再安装新的适配版本 , 这还只是一个三方库 , 如果涉及到多个不同版本的三方库 , 管理和维护就很麻烦 , 也容易出错。还有一种情况就是在同一个环境下同时运行这三个项目 , 管理就更复杂了。


这时 , Python虚拟环境应运而生 : 根据Python的安装目录虚拟出三个独立的、虚拟的Python运行环境 , 简称虚拟环境。每个虚拟环境都有一个独立的Python解释器 , 都有一套独立的Python标准库、独立的工具和独立的第三方库。三个虚拟环境分别对应三个项目 , 每个项目所使用的所有第三方库都安装在各自的虚拟环境中。Python的安装目录和各个虚拟环境之间相互独立 , 互不影响 , 从而有效解决了第三方库版本冲突的问题。

总结来说 , 虚拟环境主要有如下作用 :
解决第三方库的版本冲突、管理混乱的问题
开方环境相互独立 , 便于部署、升级、维护等
2. 虚拟环境管理工具
常见的虚拟环境管理工具如下 :
venv:Python标准库中的虚拟环境管理工具conda:Anaconda下的管理工具Virtualenv: 第三方的虚拟环境管理工具,在Pypa中维护Pipenv: 第三方的虚拟环境管理工具,在Pypa中维护poetry: 第三方的虚拟环境管理工具
参考链接
Python虚拟环境概述及常见管理工具介绍 | CHEGVA