CentOS7安装python虚拟环境
为什么要搭建虚拟环境?
问题:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.
解决方案 : 虚拟环境
作用 : 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响.
在开发过程中, 便于控制python的web框架或工具包的版本,创建多个虚拟环境,就相当于我们在一台电脑上拥有了多个python解释器。
写在前面:建议python和pip设为一致,并且均设为python3,pip3,最好不要更改原系统默认的python->python2,pip->pip2
1、安装虚拟环境
采用豆瓣源安装(可忽略这步):
pip3 install -i https://pypi.douban.com/simple virtualenv
pip3 install -i https://pypi.douban.com/simple virtualenvwrapper

2、创建 virtualenv 软连接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
3、 创建一个隐藏目录 .virtualenvs
[root@centos7~ ]# mkdir /root/.virtualenvs
所有的虚拟环境都放在此目录下
4、配置环境变量,增加最后两行
在尾部添加以下内容:
注意:在最后加入如上两行配置,一个是刚才创建的存放虚拟环境的路径,另外一个是安装的virtualenvwrapper.sh脚本的路径,使用哪个pip下载的,virtuallenv、virtualenvwrapper.sh就对应在安装的python文件夹的bin目录下, 可以先找到这个文件的位置:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 虚拟环境存放目录,可自行设置
export WORKON_HOME=/root/.virtualenvs
# virtualenvwrapper.sh命令的位置,可通过命令 find / -name virtualenvwrapper.sh 查找
source /usr/local/python3/bin/virtualenvwrapper.sh
使修改后的.bashrc文件生效:source ~/.bashrc
使virtualenvwrapper命令生效:
source /usr/local/python3/bin/virtualenvwrapper.sh
5、virtualenvwrapper常用命令
- 创建虚拟环境:mkvirtualenv [ 虚拟环境名称 ]
- 进入指定的虚拟环境:workon [ 虚拟环境名称 ]
- 删除虚拟环境:rmvirtualenv [ 虚拟环境名称 ]
- 列出所有的虚拟环境:lsvirtualenv
- 在虚拟环境激活态下进入到虚拟环境所在的目录:cdvirtualenv [ 虚拟环境名称 ]
- 退出虚拟环境:deactivate
6、测试
(1)创建一个测试的虚拟环境名为 venv:mkvirtualenv venv
(2)创建完成后自动进入 venv 虚拟环境
(3)可以查看在虚拟环境目录中( /root/.virtualenvs )已经创建为 venv 虚拟环境的文件夹
(4)退出虚拟环境:deactivate
7、错误
如果报错:一般有三种错误:
第一种:
no module named virtualenvwrapper,找不到这个模块,测试的时候会出现的问题,因为我们上面配置的时候,配置的是python3的路径,故创建虚拟环境的时候,要用python3的这个软连接,一般建议将python解释器的软连接只设置一个,设置多了也会出现问题 Too many levels of symbolic links 软连接过多,指向不明确的问题。
当出现No module named virtualenvwrapper这种错误,一般就是软连接的版本变了,查看一下:
python -V
pip -V
要使这两个是同一个源版本的,要是变了,删除原来的软连接,重新设置就好了
rm /usr/bin/python
rm /usr/bin/pip
设置如下软连接的时候,要保证python和pip是同一个源下载的,也就是下载python3.7的时候,安装好之后在bin目录下的python3和pip3
ln -s /usr/local/python3/bin/python3 /usr/bin/python(注意python3->python3更提倡,我就是这样做的)
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip (注意pip3->pip3更提倡,我就是这样做的)
第二种:
which: no virtualenv in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
这个是在创建虚拟环境的时候出现的问题:这个就是没有设置 virtualenv 软连接的问题,大多数情况都是有的,但有时候没有,网上大多数教程里在安装的时候,没有说这一点。
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
设置一下就好了
第三种,注意登录服务器报错
发生以下错误:
/usr/bin/python: No module named virtualenvwrapper virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly.
原因是在virtualenvwrapper.sh中有以下代码 :

所以,在virtualenvwrapper初始化时,命令“which python”调用的是python2.7,而我的virtualenvwrapper是由pip3下载,所以会有错误“No module named virtualenvwrapper”
解决办法:直接修改其command语句
