Python虚拟环境Virtualenv使用教程


Posted in Python onMay 18, 2015

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:
1. 在没有权限的情况下安装新套件
2. 不同应用可以使用不同的套件版本
3. 套件升级不影响其他应用

安装

sudo apt-get install python-virtualenv
使用方法

[code]

virtualenv [虚拟环境名称]

如,创建**ENV**的虚拟环境
virtualenv ENV

默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 --no-site-packages建立虚拟环境
virtualenv --no-site-packages [虚拟环境名称]

启动虚拟环境
cd ENV

source ./bin/activate

注意此时命令行会多一个(ENV),ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。

退出虚拟环境

deactivate

在虚拟环境安装Python套件
Virtualenv 附带有pip安装工具,因此需要安装的套件可以直接运行:
pip install [套件名称]

如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:
export PIP_REQUIRE_VIRTUALENV=true

或者让在执行pip的时候让系统自动开启虚拟环境:
export PIP_RESPECT_VIRTUALENV=true

Virtualenvwrapper

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
1. 将所有虚拟环境整合在一个目录下
2. 管理(新增,删除,复制)虚拟环境
3. 切换虚拟环境
4. ...

安装

sudo easy_install virtualenvwrapper 

此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行,先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs

在~/.bashrc中添加行:source /usr/local/bin/virtualenvwrapper.sh

运行: source ~/.bashrc

此时virtualenvwrapper就可以使用了。

列出虚拟环境列表

workon

也可以使用
lsvirtualenv

新建虚拟环境
mkvirtualenv [虚拟环境名称]

启动/切换虚拟环境
workon [虚拟环境名称]

删除虚拟环境

rmvirtualenv [虚拟环境名称]

离开虚拟环境
deactivate

------------------------------------------------------------------------------------------------------------------------------------------------------------

virtualenv通过创建独立Python开发环境的工具, 来解决依赖、版本以及间接权限
问题. 比如一个项目依赖Django1.3 而当前全局开发环境为Django1.7, 版本跨度过大, 导致不兼容使项目无法正在运行, 使用virtualenv可以解决这些问题.

virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库

1. 安装Virtualenv

使用pip安装Virtualenv, 使用过python的都应该知道pip包管理神器吧, 即使不知道, 网站也有大把的教程, 不过推荐查看官方安装指南

$ pip install virtualenv

//或者由于权限问题使用sudo临时提升权限

$ sudo pip install virtualenv

2. virtualenv基本使用
现在开始使用virtualenv管理python环境

➜  Test git:(master) ✗ virtualenv ENV  #创建一个名为ENV的目录, 并且安装了ENV/bin/python, 创建了lib,include,bin目录,安装了pip

New python executable in 

Installing setuptools, pip...done.

➜  Test git:(master) ✗ cd ENV

➜  ENV git:(master) ✗ ll

drwxr-xr-x  14 andrew_liu  staff  476 12  8 08:49 bin

drwxr-xr-x   3 andrew_liu  staff  102 12  8 08:49 include

drwxr-xr-x   3 andrew_liu  staff  102 12  8 08:49 lib

lib,所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/下
bin,bin/python是在当前环境是使用的python解释器

如果在命令行中运行virtualenv --system-site-packages ENV, 会继承/usr/lib/python2.7/site-packages下的所有库, 最新版本virtualenv把把访问全局site-packages作为默认行为
default behavior.

2.1. 激活virtualenv

#ENV目录下使用如下命令

➜  ENV git:(master) ✗ source ./bin/activate  #激活当前virtualenv

(ENV)➜  ENV git:(master) ✗ #注意终端发生了变化
#使用pip查看当前库

(ENV)➜  ENV git:(master) ✗ pip list

pip (1.5.6)

setuptools (3.6)

wsgiref (0.1.2) #发现在只有这三个

pip freeze  #显示所有依赖

pip freeze > requirement.txt  #生成requirement.txt文件

pip install -r requirement.txt  #根据requirement.txt生成相同的环境

2.2. 关闭virtualenv

使用下面命令

$ deactivate

2.3. 指定python版本

可以使用-p PYTHON_EXE选项在创建虚拟环境的时候指定python版本

#创建python2.7虚拟环境

➜  Test git:(master) ✗ virtualenv -p /usr/bin/python2.7 ENV2.7

Running virtualenv with interpreter /usr/bin/python2.7

New python executable in ENV2.7/bin/python

Installing setuptools, pip...done.

#创建python3.4虚拟环境

➜  Test git:(master) ✗ virtualenv -p /usr/local/bin/python3.4 ENV3.4

Running virtualenv with interpreter /usr/local/bin/python3.4

Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'

New python executable in ENV3.4/bin/python3.4

Also creating executable in ENV3.4/bin/python

Installing setuptools, pip...done.

到此已经可以解决python版本冲突问题和python库不同版本的问题

3. 其他

3.1. 生成可打包环境

某些特殊需求下,可能没有网络, 我们期望直接打包一个ENV, 可以解压后直接使用, 这时候可以使用virtualenv -relocatable指令将ENV修改为可更改位置的ENV

#对当前已经创建的虚拟环境更改为可迁移

➜  ENV3.4 git:(master) ✗ virtualenv --relocatable ./

Making script ./bin/easy_install relative

Making script ./bin/easy_install-3.4 relative

Making script ./bin/pip relative

Making script ./bin/pip3 relative

Making script ./bin/pip3.4 relative

3.2. 获得帮助

$ virtualenv -h

当前的ENV都被修改为相对路径, 可以打包当前目录, 上传到其他位置使用
这并不能使虚拟环境跨平台使用

4. 参考链接
virtualenv官方文档  http://virtualenv.readthedocs.org/en/latest/virtualenv.html

Python 相关文章推荐
python定时检查某个进程是否已经关闭的方法
May 20 Python
Django中使用group_by的方法
May 26 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
python中pika模块问题的深入探究
Oct 13 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
简单了解Python生成器是什么
Jul 02 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 Python
Python字符串处理之count()方法的使用
May 18 #Python
收藏整理的一些Python常用方法和技巧
May 18 #Python
简介Python中用于处理字符串的center()方法
May 18 #Python
Python中Random和Math模块学习笔记
May 18 #Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 #Python
Python NumPy库安装使用笔记
May 18 #Python
Python中转换角度为弧度的radians()方法
May 18 #Python
You might like
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
Python 打印中文字符的三种方法
2018/08/14 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
网络维护中文求职信
2014/01/03 职场文书
情侣吵架检讨书
2014/02/05 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书