3.5 KiB
venv 使用指南
venv 简介
在 Python 开发过程中,系统安装的 Python3 安装目录中有个 site-packages 目录,所有第三方的包都会被 pip 安装到这个目录下。 由于 pip 安装的包和 maven 不同,同一个环境中同一个包只能安装一个版本,这样就有两个问题:
- 普通用户无法安装 pip 到系统目录,这点在 Linux 系统中很明显,非 root 用户无法安装到系统自带的 Python 中;
- 不同应用的依赖包不同,使用一个环境就会产生版本冲突,使用起来非常麻烦;
为了解决以上问题,早期的 Python pip 仓库有个 virtualenv 包,Python3 自带了 venv 可以很方便得实现多应用环境隔离。 venv 的原理是为每个应用单独创建一个目录,目录中包含可执行的 Python 解释器及 site-packages 用于存放 pip 安装的包。
venv 使用步骤
- 创建目录;
$ mkdir proj01
$ cd proj01
- 使用 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
统一管理,因此只要将此目录打包、解压缩即可实现备份、迁移。