首页 > 编程笔记

Python虚拟环境有什么用?

Python 之所以强大,除了其本身的特性强大,更重要的是 Python 拥有非常多的第三方工具。

强大的软件库,让开发人员将精力集中在业务上,从而避免重复“造轮子”的浪费。但众多的软件库形成了复杂的依赖关系,加上 Python 2 和 Python 3 两个大版本的兼容性问题,这些对管理项目依赖造成了不少困扰。

在使用 Python 时,我们可以通过 pip 来安装第三方工具,但是由于 pip 的特性,系统中只能安装每个第三方工具的一个版本。

但是在实际项目开发时,不同项目可能需要第三方工具的不同版本,这迫使我们需要根据实际需求不断进行更新或卸载相应的第三方工具。而如果我们直接使用本地的 Python 环境,会导致整体的开发环境相当混乱而不易管理,这时候我们就需要开辟一个独立干净的空间进行开发和部署。

在创建新项目时创建一个虚拟环境,这样做的好处是把项目环境和操作系统环境分开,避免影响操作系统环境。

如果不创建虚拟环境,一股脑地使用 pip install 安装包,那么安装的包会统一放到操作系统的 Python 解释器目录的 site-packages 文件夹下,每新建一个项目,操作系统会自动把 site-packages 下的所有包都导入,这会使版本管理混乱。

为了方便理解虚拟环境,我们先解释几个 Python 中常用的基本概念,方便大家理解后续的内容。

1. Python 版本

Python 版本指的是 Python 解析器本身的版本。

由于 Python 3 不能与 Python 2 兼容,两大“阵营”之争持续了很长时间,因此一些软件库需要适配两种版本的 Python。同时,开发人员可能需要在一个环境中,部署不同版本的 Python,对开发和维护造成了麻烦。

2. Python包库

包库或者软件源是 Python 第三方工具包的集合,可以发布、下载和管理软件包。

其中 pip 一般是从 PyPI 官网上查找、下载工具安装包的。为了提高下载速度,世界上有很多 PyPI 的镜像服务器,在国内也有多个软件源。

3. 虚拟环境

虚拟环境并不是什么新技术,它主要利用操作系统中环境变量和进程间环境隔离的特性,Python 的虚拟环境就是利用这个特性构建的。

在激活虚拟环境时,激活脚本会将操作系统的环境变量 PATH 修改为当前虚拟环境的路径,这样后续执行命令时就会在虚拟环境的路径中查找,从而避免了在原本路径查找,从而实现了 Python 环境的隔离。

第一次安装Python后,我们就有了一个全局级别的,或者系统级别的环境。我们可以使用虚拟环境工具在全局环境的基础上创建多个相互独立、互不影响的虚拟环境,在这些虚拟环境中可以安装不同版本的包库。

从本质上来说,虚拟环境就是相互独立的文件夹,内含Python解释器和相关依赖。

使用虚拟环境的好处显而易见:
常见的虚拟环境管理工具有 virtualenv、virtualenvwrapper、pipenv、conda 等,其中我比较推荐 pipenv,你可以转到《pipenv 使用教程》了解更多。

推荐阅读