使用虚拟环境的意义在于三点:
创建独立的Python环境,多个Python互相独立互不影响
虚拟环境中,可以在没有权限的情况下直接安装新套件
不同应用在不同的虚拟环境中可以使用不同的套件版本,并且升级套件不会影响其他应用,解决了不同应用间多版本的冲突问题。
python的虚拟环境主要使用的是virtualenv软件,而virtualenvwrapper是virtualenv的扩展包,用于管理虚拟环境。它的作用是:
- 将所有虚拟环境整合到一个目录下
- 管理(创建,删除,复制)虚拟环境
- 切换虚拟环境
Ubuntu系统安装虚拟环境步骤:
1)设置root密码
sudo passwd root
2)安装包管理神器pip
sudo apt install python-pip
2.1)升级pip
sudo pip install --upgrade pip
2.2)使用pip安装虚拟环境完成后,有可能使用指令无法启动虚拟环境,为了避免套件被安装在系统环境中,需要在~/.bashrc
文件中加上代码:
export PIP_REQUIRE_VIRTUALENV=true
或者在执行pip的时候让系统自动开启虚拟环境
export PIP_RESPECT_VIRTUALENV=true
3)安装virtualenv
sudo pip install virtualenv
由于有virtualenvwrapper虚拟环境管理包,能够直接使用简单指令操作虚拟环境,所以就不使用virtualenv自带的指令来操作虚拟环境。
4)安装virtualenvwrapper
sudo pip install virtualenvwrapper
5)配置virtualenvwrapper
默认的virtualenvwrapper安装在/usr/loacl/bin
目录下,需要运行virtualenvwrapper.sh
文件。按照文件中的安装步骤设置环境:
- 创建目录存放虚拟环境
mkdir $HOME/.virtualenvs
- 在
~/.bashrc
中添加行:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
- 运行:
source ~/.bashrc
此时virtualenvwrapper就配置好了,接下来可以使用命令运行虚拟环境。
6)使用指令操作虚拟环境
- 列出虚拟环境列表
lsvirtualenv
- 创建新虚拟环境
mkvirtualenv [name]
- 启动/ 切换虚拟环境
workon [name]
- 删除虚拟环境
rmvirtualenv [name]
- 离开虚拟环境
deactivate
根据步骤,当运行source ./.bashrc报错:
/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.
错误原因:Ubuntu安装了2.7和3.x两个版本的python,在安装时使用的是sudo pip3 install virtualenvwrapper
在我运行的时候默认使用的是python2.x,但在python2.x中不存在对应的模块。(virtualenvwrapper.sh文件内容如下:):
# Locate the global Python where virtualenvwrapper is installed.
if [ "$VIRTUALENVWRAPPER_PYTHON" = "" ] then
VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
fi
当不存在VIRTUALENVWRAPPER_PYTHON环境时,会默认选择使用which python(我这里默认是python2),
所以需要增加此环境变量:
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3