138 lines
3.5 KiB
Markdown
138 lines
3.5 KiB
Markdown
# 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. 创建目录;
|
||
|
||
|
||
```bash
|
||
$ mkdir proj01
|
||
$ cd proj01
|
||
```
|
||
|
||
2. 使用 venv 创建一个独立的 Python 环境;
|
||
|
||
```bash
|
||
$ pwd
|
||
/home/work/proj01
|
||
|
||
$ python -m venv .
|
||
```
|
||
|
||
查看当前目录,可以看见几个文件夹和 `pyvenv.cfg` 文件:
|
||
|
||
```bash
|
||
# [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 命令激活虚拟环境:
|
||
|
||
```bash
|
||
# [18:08:56 ~/proj01] $ source bin/activate
|
||
# [18:09:40 (py:proj01) ~/proj01] $
|
||
```
|
||
|
||
可以看到虚拟环境已激活,可以使用 `type python` 命令查看当前使用的是哪个 python:
|
||
```bash
|
||
$ type python
|
||
python is /home/work/proj01/bin/python
|
||
```
|
||
|
||
可以在 Python 脚本中使用该目录指定解释器。
|
||
|
||
## venv 封装脚本使用
|
||
|
||
基于 venv 的原理,我们对 venv 进行简单的封装,将 venv 虚拟环境统一管理起来,方便部署、运维。
|
||
|
||
封装脚本为 venv.sh,需要使用 `source` 激活:
|
||
|
||
### 激活 venv 封装函数
|
||
|
||
```bash
|
||
$ source venv.sh
|
||
```
|
||
激活后,环境中会增加以下几个函数:
|
||
|
||
### 查看当前已安装的虚拟环境
|
||
|
||
```bash
|
||
$ lsvenv
|
||
```
|
||
|
||
或者
|
||
|
||
```bash
|
||
$ workon
|
||
```
|
||
|
||
### 创建虚拟环境
|
||
|
||
创建好虚拟环境后默认激活,也可以使用 `workon` 命令激活或者切换虚拟环境。
|
||
|
||
```bash
|
||
$ mkvenv $venv_name
|
||
```
|
||
|
||
创建好虚拟环境后,下一步可以使用 pip 安装三方包,可以设置 pip 安装源为清华源,加快下载速度:
|
||
|
||
```bash
|
||
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
||
```
|
||
|
||
### 激活虚拟环境
|
||
|
||
```bash
|
||
$ workon $venv_name
|
||
```
|
||
|
||
### 取消激活虚拟环境
|
||
|
||
可以使用封装的 `qvenv`,或者使用 `deactivate`。
|
||
|
||
```bash
|
||
$ qvenv
|
||
```
|
||
|
||
### 删除虚拟环境
|
||
|
||
删除虚拟环境时必须指定一个虚拟环境名称,不传参数会提示并退出。
|
||
|
||
```bash
|
||
$ rmvenv $venv_name
|
||
```
|
||
|
||
## 备注
|
||
|
||
venv 虚拟环境的激活,适用于在开发、测试阶段定位问题,在线上环境批量调用脚本时,
|
||
要在 Python 脚本开头标明使用的哪个 Python 解释器:
|
||
|
||
```python
|
||
#!/usr/bin/env python
|
||
```
|
||
|
||
或者写明 Python 解释器的全路径:
|
||
|
||
```python
|
||
#!/home/work/.venv/pandas/bin/python
|
||
```
|
||
|
||
## 备份 & 迁移
|
||
|
||
venv 的原理是新建目录隔离不同应用的依赖,因此只要把集中管理虚拟环境的目录,如脚本中使用 `$HOME/.venv` 统一管理,因此只要将此目录打包、解压缩即可实现备份、迁移。
|