Python虚拟环境

Python应用程序通常会使用不在标准库内的软件包和模块. 应用程序有时需要特定版本的库, 因为应用程序可能需要修复特定的错误, 或者可以使用库的过时版本的接口编写应用程序.

这意味着一个Python安装可能无法满足每个应用程序的需求. 如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本, 则需求存在冲突, 安装版本1.0或2.0都将导致某一个应用程序无法运行.

这个问题的解决方案是创建一个virtual environment, 一个目录树, 其中安装有特定Python版本, 以及许多其它包.

注解

virtual environment — 虚拟环境

一种采用协作式隔离的运行时环境. 允许Python用户和应用程序在安装和升级Python分发包时不会干扰到同一系统上运行的其它Python应用程序的行为.

然后, 不用的应用程序将使用不同的虚拟环境. 要解决先前需求相冲突的例子, 应用程序A可以拥有自己的安装了1.0版本的虚拟环境, 而应用程序B则拥有安装了2.0版本的另一个虚拟环境. 如果应用程序B要求将某个库升级到3.0版本, 也不会影响应用程序A的环境.

创建虚拟环境

创建虚拟环境可以使用工具virtualenvvenv. venv是Python标准库内置的虚拟环境管理工具, Python 3.3加入, Python 3.5开始作为管理虚拟环境的推荐工具, 用法类似virtualenv. 如果使用的是Python3, 推荐使用venv.

要创建虚拟环境, 先确定要放置它的目录. 例如我们的项目名称叫snow, 创建对应的文件夹并切换到目录:

$ mkdir snow
$ cd snow

使用venv创建虚拟环境:

python3 -m venv snow-venv

其中snow-venv是虚拟环境的名字, 可以自由修改(通常会使用venv或env作为虚拟环境名).

激活虚拟环境

通过执行对应的脚本来激活虚拟环境, 不同操作系统的激活命令有一点不同.

  • Windows(CMD.exe)使用下面的激活命令:
snow-venv/scripts/activate
  • Linux使用下面的命令:
soure snow-venv/bin/activate

. snow-venv/bin/activate

激活虚拟环境之后, 命令提示符前会显示当前虚拟环境的名字:

使用deactivate命令可以退出虚拟环境.

使用pip管理包

激活虚拟环境之后, 就可以pip来管理虚拟环境中的包了.

总结

可以针对每个应用创建独立的Python运行环境, 这样就可以对每个应用的Python环境进行隔离, 从而解决不用应用间多版本的冲突问题.