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 | The virtual environment was not created successfully because ensurepip is not |
原因说得很清楚了,把 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 | Package Version |
则表明已安装了基本模块且 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 | [list] |
如果遇到:
1 | You are using pip version 19.0.3, however version 19.1.1 is available. |
就执行 pip install --upgrade pip
升级 pip 就行了
4. 退出虚拟环境
退出 venv:deactivate
可以看到命令行的前缀 (venv) 消失不见了。
和conda的对比
conda可以直接创建不同python版本的虚拟环境。venv只是指定创建不同python版本的虚拟环境,前提是你的电脑上已经安装了不同版本的python,与conda相比没有conda灵活。