virtualenv是如何建立“独立”的Python运行环境的呢?html
原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。python
linux提供的虚拟环境工具备virtualenv, pipenvlinux
#指定清华源下载pip的包 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv #升级pip工具 pip3 install --upgrade pip
<br/>shell
####1.安装python提供的虚拟环境django
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
或者vim
pip3 install virtualenv
####2.建立虚拟环境安装的目录bash
mkdir Myproject cd Myproject
####3.经过命令建立虚拟环境app
#建立一个干净隔离的虚拟环境,且以python3为复制本体,虚拟环境名叫作venv1 virtualenv --no-site-packages --python=python3 venv1 --no-site-packages 建立干净隔离的python虚拟环境 --python=python3
####4.进入虚拟环境工具
source venv1/bin/activate
检查是否正确安装虚拟环境ui
#常看当前物理环境的path变量: [root@localhost opt]# echo $PATH /opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin #激活虚拟环境,再次查看环境变量 (venv1) [root@localhost bin]# echo $PATH /opt/venv1/bin:/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin #检查是否正确安装虚拟环境 (venv1) [root@localhost venv1]# which python3 /opt/venv1/bin/python3 (venv1) [root@localhost venv1]# which pip3 /opt/venv1/bin/pip3 (venv1) [root@localhost venv1]# pip3 list Package Version ---------- ------- pip 19.0.3 pytz 2018.9 setuptools 40.8.0 wheel 0.33.1
####5.安装第三方包
(venv)Myproject: pip3 install django==2 #此时pip的包都会安装到venv环境下,venv是针对Myproject建立的
####6.退出虚拟环境,再检查python3解释器路径
deactivate
<br/>
如今要在linux中能够运行,其中运行一个django2,再同时运行一个django1
1.激活venv1 建立django1.11.14 [root@wangdachui opt]# source venv1/bin/activate 2.安装django pip3 install -i https://pypi.douban.com/simple django==1.11.14 3.建立django项目 运行 django-admin startproject mydjango114 4.建立venv2,建立django2版本 virtualenv --no-site-packages --python=python3 venv2 激活venv2 source venv2/bin/activate 下载django2版本,且建立django2项目 pip3 install -i https://pypi.douban.com/simple django 建立django项目 运行 django-admin startproject mydjango21
虚拟环境工具virtuelenv 必须 找到venv1那个文件夹
而且必须得手动source激活
virtualenv 的一个最大的缺点就是:
每次开启虚拟环境以前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就须要咱们记住每一个虚拟环境所在的目录。而且还有可能你忘记了虚拟环境放在哪。
- 一种可行的解决方案是,将全部的虚拟环境目录全都集中起来,例如/opt/all_venv/,而且针对不一样的目录作不一样的事。
- 使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实就是统一管理虚拟环境的目录,而且省去了source的步骤。
####1.安装virtualenvwrapper
pip3 install virtualenvwrapper
####2.设置Linux环境变量, 每次启动就加载virtualenvwrapper
把下面两行代码添加到 ~/.bashrc文件中 打开文件 vim ~/.bashrc 写入如下四行代码 #设置virtualenv的统一管理目录 export WORKON_HOME=~/Envs #添加virtualenvwrapper的参数,生成干净隔绝的环境 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #指定python解释器 export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3 #执行virtualenvwrapper安装脚本 source /opt/python34/bin/virtualenvwrapper.sh 读取文件,使得生效,此时已经可使用virtalenvwrapper source ~/.bashrc
####3.virtualwrapper基本使用命令
建立一个虚拟环境: $ mkvirtualenv my_django115 这会在 ~/Envs 中建立 my_django115 文件夹。 在虚拟环境上工做:激活虚拟环境my_django115 $ workon my_django115 再建立一个新的虚拟环境 $ mkvirtualenv my_django2 virtualenvwrapper 提供环境名字的tab补全功能。 当有不少环境, 而且很难记住它们的名字时,这就显得颇有用。 workon还能够任意中止你当前的环境,能够在多个虚拟环境中来回切换 workon django1.15 workon django2.0 也能够手动中止虚拟环境 deactivate 删除虚拟环境,须要先退出虚拟环境 rmvirtualenv my_django115
####4.其余经常使用命令
#列举全部的环境。 lsvirtualenv # 导航到当前激活的虚拟环境的目录中,好比说这样您就可以浏览它的 site-packages 。 cdvirtualenv # 和上面的相似,可是是直接进入到 site-packages 目录中。 cdsitepackages # 显示 site-packages 目录中的内容。 lssitepackages
完整官网介绍:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html