为什么要使用virtualenv?
首先,virtualenv为应用提供了隔离的Python运行环境,可以解决不同应用间多版本的冲突问题。
比如,现在的电脑中一般同时具有python2和python3,系统的运行需要python2,做开发时往往需要最新的python3。而在使用工具pip
时,所有第三方的包都会被安装到默认的python(一般是python2)的site-packages目录下,有时这不是我们所希望的。
这正是要用到virtualenv的场合。virtualenv会把用户指定版本的python复制到虚拟环境下,并修改相关的环境变量,使得python
和pip
命令指向当前虚拟环境。用户可以在虚拟环境中任意操作,而不会对外部造成影响。
1 安装虚拟环境工具
pip3 install virtualenv
pip3 install virtualenvwrapper
2 配置
- 创建虚拟环境的管理目录: ~表示当前用户的家目录
mkdir ~/.virtualenvs
- 在启动文件~/.bashrc下添加虚拟环境变量:打开.bashrc文件,向其底部添加如下
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
第一行意思是指定python虚拟环境存放路径
第二行意思是使virtualenvwrapper.sh文件生效(运行virtualenvwrapper.sh)
- 回到shell界面,输入指令令其生效
source ~/.bashrc
- 如果报错-bash: /usr/local/bin/virtualenvwrapper.sh: No such file or directory
说明文件没在这个路径下,可以通过which 命令查看(which是用来查看当前要执行的命令所在的路径),修改source /usr/local/bin/virtualenvwrapper.sh
which virtualenvwrapper.sh
- 报错:/usr/bin/python: No module named virtualenvwrapper
错误原因:Ubuntu安装了2.7和3.x两个版本的python,在安装时使用的是sudo pip3 install virtualenvwrapper
在运行的时候默认使用的是python2.x,但在python2.x中不存在对应的模块所以,在bashrc文件里面加入如下命令即可:(注:一定要加在虚拟环境变量之前)
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
让其自动选择Python3解释器,就不会报错了!
3 查看python3目录(其他版本也可)
which python3
#我的python3是在/usr/bin/python3
4 创建python3虚拟环境
mkvirtualenv -p /usr/bin/python3 py3env
-p /usr/bin/python3指定了要复制的python的目录
py3env是存放环境的文件夹名称
5 激活虚拟环境
#使用source命令来使得环境变量修改后立即生效
source ./py3env/bin/activate
可以看到命令提示符有一个(py3env)
的前缀,即表示激活成功。
此时,你的所有python、pip操作都会指向虚拟环境创建时复制的那一份python。
比如再次执行which python,如图:
原来的路径是/usr/bin/python3
,激活虚拟环境后是/home/test/virtualenv/py3env/bin/python3
。
6 退出虚拟环境
deactivate
(py3env)
前缀消失,环境变量被重设为原来的。
7 Tip
切记要在工作时激活虚拟环境,结束工作后退出。