使用venv创建python3虚拟环境

目录
  1. 1. python3虚拟环境
  2. 2. 不使用虚拟环境
  3. 3. 使用虚拟环境
  4. 4. 1. 安装 python3
  5. 5. 2. 新建虚拟环境
  6. 6. 3. 激活虚拟环境
  7. 7. 4. 退出虚拟环境
  8. 8. 和conda的对比

python3虚拟环境

首先强烈推荐大家使用python3提供的虚拟环境进行依赖管理,这样的话,每个项目都有自己独立的依赖环境。避免了不同项目使用同一个依赖的不同版本而导致的冲突。

不使用虚拟环境

如果不使用虚拟环境,那么所有项目依赖的包都会存放在一起,这也是以前包的管理方式,好处是用到相同的包不需要重复下载,然而更大的坑是如果以后其他项目用到了同样包的不同版本,就很难搞了;
比如在开发A项目时使用了最新的1.1版本的flask框架,开发完毕并上线正常运行。

过了一段时间再次开发项目B,此时使用最新的1.2版本的flask框架,开发完毕并上线。

此时再次迭代开发A项目时,可能因为版本的变化而导致A项目无法像原来那样运行。

使用虚拟环境

使用python3提供的虚拟环境开发,那么A项目在开发时,A项目的所有依赖环境一般都是A项目内,B项目的所有依赖都是B项目中。这样版本就不会相互影响了。
所以建议大家养成好习惯,在每个项目中都使用虚拟环境进行依赖管理。

venv是Python标准库内置的虚拟环境管理工具,Python 3.3 加入,Python 3.5 开始作为管理虚拟环境的推荐工具,用法类似 virtualenv。
如果你使用 Python 3,推荐使用 venv 来替代 virtualenv。

1. 安装 python3

brew install python3

2. 新建虚拟环境

切换到项目根目录
cd path/to/myproject

新建一个 venv,习惯上命名为 venv:
python3 -m venv venv

没有任何错误提示,表示成功;如果是 Ubuntu 系统可能提示:

1
2
3
4
5
6
7
8
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

apt-get install python3-venv

You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.

原因说得很清楚了,把 python3-venv 装一下就可以了

3. 激活虚拟环境

激活 venv:
source venv/bin/activate
这时候命令行开头会发生变化, 会多出一个前缀 (venv),表示当前是在虚拟环境中操作。

验证一下:
which python

会得到:
path/to/myproject/venv/bin/python

再验证版本:
python -V

会得到:
Python 3.6.8
发现并不是系统自带的的 python,而是刚刚创建的 venv 文件夹中的 python,而且是 3 的版本,这就对了。

查看一下目前都安装了哪些模块:
pip list

可能得到如下结果:

1
2
3
4
5
Package       Version
------------- -------
pip 9.0.1
pkg-resources 0.0.0
setuptools 39.0.1

则表明已安装了基本模块且 pip 可以正常使用。

pip 有时候会有如下提示:

1
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.

你可以在 venv 目录下新建一个 pip.conf 文件,然后把下面的内容粘贴到 pip.conf 中以消除错误提示:

1
2
[list]
format=columns

如果遇到:

1
2
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

就执行 pip install --upgrade pip 升级 pip 就行了

4. 退出虚拟环境

退出 venv:
deactivate
可以看到命令行的前缀 (venv) 消失不见了。

和conda的对比

conda可以直接创建不同python版本的虚拟环境。venv只是指定创建不同python版本的虚拟环境,前提是你的电脑上已经安装了不同版本的python,与conda相比没有conda灵活。