1. 简介

介绍

Python虚拟环境(virtual environments)类似于一个沙箱,在虚拟环境中会使用独立的模块、库,而不会去使用系统的 site-packages 目录下的模块和库。

使用场景

在Python中概要使用虚拟环境的场景有很多,比如如果要在一个Python版本下运行多个服务,但是每个服务需要使用的模块和库的版本都不相同。或者你想为你的每个Python项目都配置独立的模块和库,不想它们互相之间影响。这个时候虚拟环境就派上了用场。

原理

虚拟环境主要是利用了操作系统中环境变量以及进程间环境隔离的特性。其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序 a.exe,存放在 D:\ 中,在命令行中执行 a.exe ,会得到提示“ 无法找到程序 a.exe”,为了让系统找到,可以将 D:\ 路径加入到 PATH 环境变量中,当输入 a.exe 时,操作系统就可以成功执行。
Python 虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python 环境的隔离。

2. 创建

virtualenv

在Python3.3版本之前,只能通过 virtualenv 这个工具来创建虚拟环境。
首先要安装这个工具

pip install virtualenv

安装完成后,我们在需要虚拟环境的目录下,执行这条命令,其中 envName 是你创建的虚拟环境的名字,下面的代码以 testEnv 为例

# virtualenv envName
virtualenv testEnv

这样我们的虚拟环境 testEnv 就创建好了
在创建虚拟环境的时候,命令 virtualenv 也有可选参数,下面介绍几个常用参数,其他参数可使用 virtualenv -h 进行查看。
• -p py | --python py , 指定虚拟环境Python的版本
• -c | --clear , 如果创建虚拟环境的目录已经有了其他虚拟环境,将其清除掉重建
• --system-site-packages , 使用全局的 site-packages 作为虚拟环境初始的包和库
• --no-pip , 新建的虚拟环境不带pip包管理工具
• --pip version , 指定pip版本

venv

在Python3.3版本之后,venv 模块成为Python标准库的一部分,也是用来创建Python虚拟环境的。

# python -m venv envName
python -m venv testEnv

而 venv 模块的参数相比于 virtualenv 少了一些,主要有
• --clear , 同上
• --without-pip , 同上面的 --no-pip
有一点需要注意的是,因为 venv 是依附于一个 Python 解析器创建的,所以不需要指定 Python 解释器版本。

3. 激活

在创建好虚拟环境后还需要激活才可以使用,可以理解为将当前运行环境中的 PATH 替换为虚拟环境的。
virtualenv 和 venv 两者的激活方法都是一样的,都是运行虚拟环境中的脚本文件
• MacOs/Linux 中的脚本为 /bin/activate 默认脚本文件没有可执行权限,一般使用这条命令激活

source testEnv/bin/activate

• Windows 系统中,激活脚本路径是 \Scripts\activate.bat 激活以后在命令行中发生的变化:你的命令提示符前面会显示你的虚拟环境的名称。

python虚拟环境路径设置 python 虚拟环境_Python

此时我们打印环境变量看一看

echo $PATH

python虚拟环境路径设置 python 虚拟环境_python_02

可以看到虚拟环境的脚本目录加载到了最前面。
4. 退出
virtualenv 和 venv 两者退出的命令也是一样的

deactivate

在命令行执行这条命令,就会退出至全局环境,环境变量恢复了。
多使用虚拟环境,有时候帮助很大~