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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python 画函数曲线示例
Dec 04 Python
Python接口测试环境搭建过程详解
Jun 29 Python
Python lambda表达式原理及用法解析
Aug 18 Python
django使用graphql的实例
Sep 02 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
Django项目在pycharm新建的步骤方法
Mar 02 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正确解析UTF-8字符串技巧应用
2012/11/07 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python清除函数占用的内存方法
2018/06/25 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
幼儿园门卫岗位职责
2014/02/14 职场文书
交通事故私了协议书
2014/04/16 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
详解Nginx 工作原理
2021/03/31 Servers
如何用python反转图片,视频
2021/04/24 Python