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