Linux下virtualenv与virtualenvwrapper详解
virtualenv
在使用Python开发的过程中,工程一多,难免会碰到不同的工程依赖不同的版本的库的问题;
或者是不想让物理环境中充斥着各种各样的库,引发未来的依赖灾难.
因此,我们需要对不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁.
这里,就要隆重介绍 virtualenv,一个可以帮助我们管理不同python环境的绝好工具.
virtualenv 可以在系统中建立多个不同并且互不干扰的虚拟环境
一、Linux下安装、配置virtualenv
#指定清华源下载pip的包 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
二,创建独立运行环境
virtualenv --no-site-packages --python=python3 虚拟环境名称venv1
# --no-site-packages 保证虚拟环境没有任何的第三方包
# --python=python3 指定解释器是python3
三, 激活虚拟环境
source /opt/venv1/bin/activate
四, 安装Django
pip3 install django==版本
五, 退出当前虚拟环境
deactivate
virtualenv创建独立的Python运行环境就结束了,
原理很简单,就是把Python系统复制一份到virtualenv的环境,
用命令 source /opt/venv1/bin/activate 进入到一个virtualenv环境时,
virtualenv会修改相关环境变量,让命令python和pip指向当前的virtualenv环境
(env1) [root@localhost ~]# echo $PATH /root/Envs/env1/bin:/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
注意: 确保开发环境的一致性
1. 假设,我们在本地开发环境,准备好了项目和依赖环境
2. 现在需要将项目上传至服务器,上线发布
3. 那么,就要保证服务器的python环境一致性
解决方案:
1. 导出当前python环境的包
pip3 freeze > requirements.txt
# 创建一个 requirements.txt 文件,包含了当前环境中的所有包及各自的版本
2.将requirements.txt上传到服务器,进去虚拟环境
pip3 install -r requirements.txt
virtualenvwrapper
virtualenv 的一个最大的缺点是:
每次开启虚拟环境都需要在虚拟环境所在的目录下 source /opt/名称/bin/activate,这就需要我们记住每一个虚拟环境所在的目录.
但我们不可能记住每一个虚拟环境放在哪里.
virtualenvwrapper 就提供了统一管理虚拟环境的目录,并且省去了source的步骤.
安装和配置virtualenvwrapper
1. 安装
pip3 install virtualenvwrapper
2. 设置linux的环境变量,每次启动就加载virtualenvwrapper
# 打开个人用户配置文件
vim ~/.bashrc
# 回到最底行,写入以下四行代码,保证路径和自己的机器一样
export WORKON_HOME=~/Envs/ #设置virtualenv的统一管理目录,名字自己定义
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3 #指定python3本体解释器
source /opt/python36/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
#保存退出,退出当前会话,重新登录
logout
mkvirtualenv的使用
1. 创建一个虚拟环境:
mkvirtualenv venv2
2. 激活虚拟环境
workon venv2
#virtualenvwrapper 提供环境名字的tab补全功能
[root@localhost ~]# workon venv2
workon还可以任意在多个虚拟环境中跳转
3. 删除虚拟环境
rmvirtualenv venv2 # 要先退出当前环境