notes/config/python/venv/venv.md

3.5 KiB
Raw Permalink Blame History

venv 使用指南

venv 简介

在 Python 开发过程中,系统安装的 Python3 安装目录中有个 site-packages 目录,所有第三方的包都会被 pip 安装到这个目录下。 由于 pip 安装的包和 maven 不同,同一个环境中同一个包只能安装一个版本,这样就有两个问题:

  1. 普通用户无法安装 pip 到系统目录,这点在 Linux 系统中很明显,非 root 用户无法安装到系统自带的 Python 中;
  2. 不同应用的依赖包不同,使用一个环境就会产生版本冲突,使用起来非常麻烦;

为了解决以上问题,早期的 Python pip 仓库有个 virtualenv 包Python3 自带了 venv 可以很方便得实现多应用环境隔离。 venv 的原理是为每个应用单独创建一个目录,目录中包含可执行的 Python 解释器及 site-packages 用于存放 pip 安装的包。

venv 使用步骤

  1. 创建目录;
$ mkdir proj01
$ cd proj01
  1. 使用 venv 创建一个独立的 Python 环境;
$ pwd
/home/work/proj01

$ python -m venv . 

查看当前目录,可以看见几个文件夹和 pyvenv.cfg 文件:

# [18:08:52 ~/proj01] $ ls -alh
总计 16K
drwxr-xr-x 2 work work 4.0K Nov22日 18:08 bin
drwxr-xr-x 3 work work 4.0K Nov22日 18:06 include
drwxr-xr-x 3 work work 4.0K Nov22日 18:06 lib
lrwxrwxrwx 1 work work    3 Nov22日 18:06 lib64 -> lib
-rw-r--r-- 1 work work  155 Nov22日 18:08 pyvenv.cfg

使用 source 命令激活虚拟环境:

# [18:08:56 ~/proj01] $ source bin/activate
# [18:09:40 (py:proj01) ~/proj01] $

可以看到虚拟环境已激活,可以使用 type python 命令查看当前使用的是哪个 python

$ type python
python is /home/work/proj01/bin/python

可以在 Python 脚本中使用该目录指定解释器。

venv 封装脚本使用

基于 venv 的原理,我们对 venv 进行简单的封装,将 venv 虚拟环境统一管理起来,方便部署、运维。

封装脚本为 venv.sh需要使用 source 激活:

激活 venv 封装函数

$ source venv.sh

激活后,环境中会增加以下几个函数:

查看当前已安装的虚拟环境

$ lsvenv

或者

$ workon

创建虚拟环境

创建好虚拟环境后默认激活,也可以使用 workon 命令激活或者切换虚拟环境。

$ mkvenv $venv_name

创建好虚拟环境后,下一步可以使用 pip 安装三方包,可以设置 pip 安装源为清华源,加快下载速度:

$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

激活虚拟环境

$ workon $venv_name

取消激活虚拟环境

可以使用封装的 qvenv,或者使用 deactivate

$ qvenv

删除虚拟环境

删除虚拟环境时必须指定一个虚拟环境名称,不传参数会提示并退出。

$ rmvenv $venv_name

备注

venv 虚拟环境的激活,适用于在开发、测试阶段定位问题,在线上环境批量调用脚本时, 要在 Python 脚本开头标明使用的哪个 Python 解释器:

#!/usr/bin/env python

或者写明 Python 解释器的全路径:

#!/home/work/.venv/pandas/bin/python

备份 & 迁移

venv 的原理是新建目录隔离不同应用的依赖,因此只要把集中管理虚拟环境的目录,如脚本中使用 $HOME/.venv 统一管理,因此只要将此目录打包、解压缩即可实现备份、迁移。