virtualenv 和 virtualenvwrapper 实践

安装 virtualenv和virtualfish的话,就不要安装anaconda,可能会出错。python

 

virtualenv

首先来聊一下 virtualenv 是个什么鬼。nginx

在使用 Python 开发的过程当中,工程一多,不免会碰到不一样的工程依赖不一样版本的库的问题;亦或者是在开发过程当中不想让物理环境里充斥各类各样的库,引起将来的依赖灾难。此时,咱们须要对于不一样的工程使用不一样的虚拟环境来保持开发环境以及宿主环境的清洁。这里,就要隆重介绍 virtualenv,一个能够帮助咱们管理不一样 Python 环境的绝好工具。virtualenv 能够在系统中创建多个不一样而且相互不干扰的虚拟环境。另外,值得一提的是,在 virtualenv 的虚拟环境中使用 pip 安装依赖还能够绕过某些系统的权限设置,由于毕竟不须要向系统目录写入数据嘛~~git

那么,virtualenv 是怎么运行的呢?github

安装

首先从安装讲起,这里假设已经安装了 pip,若是没有安装 pip 的话,请自行出门谷歌(好吧,我是好人,附上pip官方文档连接)。以后就能够用 pip 来直接安装 virtualenv 了。固然,这里多是须要使用 sudo 提高权限的,毕竟是在宿主物理环境里安装。以下命令中 sudo 省略,若有需求请自行添加。sql

 
pip install virtualenv
 

好了如今你拥有了 virtualenv 虚拟环境管理器。shell

使用

接下来讲使用。api

好比咱们想要作一点奇怪的事情,写一个脚本去抓取某个网站的信息,咱们暂且把这个工程叫作 spider 吧。这个工程里须要访问网络,咱们打算使用为人类编写的网络访问库 requests,可是咱们又不想在宿主环境中安装这个包。让咱们开始吧。bash

假设咱们把这个工程放在 /path/to/project/spider/ 目录下,而且这里咱们把虚拟环境直接放在工程目录下。首先,咱们在这个目录下创建一个虚拟环境。网络

 
virtualenv /path/to/project/spider
 

这样,虚拟环境就创建好了。此时能够看到,在这个目录下面会有三个目录被创建:app

  • bin

  • include

  • lib

其中,bin 目录中包含一些在这个虚拟环境中可用的命令,以及开启虚拟环境的脚本 activateinclude 中包含虚拟环境中的头文件,包括 Python 的头文件;lib 中就是一些依赖库啦~~

固然,如今咱们尚未进入到虚拟环境中。激活虚拟环境只须要一条命令。

 
source /path/to/project/spider/bin/activate
 

此时就能够咱们就已经在虚拟环境中啦。

接下来安装工程须要的 requests 库。

 
pip install requests
 

搞定!

这时候在虚拟环境里就有了 requests 库,宿主环境中则不会被干扰。

那么如何退出虚拟环境嘞?退出就更简单啦,只须要下面一个命令就搞定啦。

 
deactivate
 

此时就回到了进入虚拟环境以前,一切都好像没发生过。多年之后,若是你忘记了虚拟环境的位置,一切就真的没发生过了 = =

补充一句,若是想要删除虚拟环境,只要把这个目录下的 binincludelib 三个目录删掉就行了。

 

(注意: virtualenvwrapper和virtualfish依赖virtualenv)

virtualenvwrapper (若用的是fish shell,建议使用virtualfish替代 virtualenvwrapper:  https://github.com/adambrenecki/virtualfish,注意,若是使用 vf new -p /usr/bin/python3.5 env35 建立出错,可使用 sudo pip install setuptools --no-use-wheel --upgrade 解决问题; 若是你想在virtualfish的virtualenv 下使用 ipython, 建议直接在virtualfish虚拟python环境(即vf activate ***)下执行:pip install ipython (这样该虚拟python环境下就能够直接运行 ipython), 尽可能不要在系统shell环境(未运行 vf activate *** 的环境)下用 sudo 执行: sudo apt-get install ipython (这样的后果可能致使虚拟环境下ipython执行不成功))

为神马须要 virtualenvwrapper?这要从 virtualenv 提及。

上一节结束的时候说,若是忘记了虚拟环境的位置,一切就真的没发生过了。虽然是句玩笑,不过真的会发生哦~

virtualenv 的一个最大的缺点就是,每次开启虚拟环境以前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就须要咱们记住每一个虚拟环境所在的目录。

一种可行的解决方案是,将全部的虚拟环境目录全都集中起来,好比放到 ~/virtualenvs/,并对不一样的虚拟环境使用不一样的目录来管理。virtualenvwrapper 正是这样作的。而且,它还省去了每次开启虚拟环境时候的 source 操做,使得虚拟环境更加好用。

安装

一样,从安装开始。

安装 virtualenvwrapper 也可使用 pip 的方式。须要加入 sudo 的话请自行加入哦~

 
pip install virtualenvwrapper
 
$ sudo -E pip install virtualenvwrapper      # 有些时候可能须要加上 -H,保留 $HOME 环境变量不改变

(加上 -E 能够在切换用户时保持环境变量不切换,若是提示)

不过,在 Mac OS X El Capitan 上可能会出现安装报错的状况,主要问题出在一个叫作 six 的包上。所以安装的时候,能够采用以下方式。

 
pip install virtualenvwrapper --ignore-installed six
 

如今,咱们就拥有了一个能够管理虚拟环境的神器。

使用

首先,须要对 virtualenvwrapper 进行配置。它须要指定一个环境变量,叫作 WORKON_HOME,而且须要运行一下它的初始化工具 virtualenvwrapper.sh,这个脚本在 /usr/local/bin/ 目录下。WORKON_HOME 就是它将要用来存放各类虚拟环境目录的目录,这里咱们能够设置为 ~/.virtualenvs

export WORKON_HOME='~/.virtualenvs'
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.5
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv source /usr/local/bin/virtualenvwrapper.sh

因为每次都须要执行这两部操做,咱们能够将其写入终端的配置文件中。例如,若是使用 bash,则添加到 ~/.bashrc (或者 )中;若是使用 zsh,则添加到 ~/.zshrc 中。这样每次启动终端的时候都会自动运行,终端其中以后 virtualenvwrapper 就能够用啦。

利用 virtualenvwrapper,咱们可使用下面的命令轻松建立一个虚拟环境。

 
$ mkvirtualenv spider              # 这里建立的是系统默认的python版本的环境,用 which python 查看默认版本。 建议用下面的命令来制定版本。
$ mkvirtualenv -p /Users/heliclei/.localpython/bin/python3.4 env34 # 指定创建3.4的python环境
$ mkvirtualenv -p /Users/heliclei/.localpython/bin/python2.7 env27 # 指定创建2.7的python环境
 

以后咱们就有了一个叫作 spider 的虚拟环境。它被存放在 $WORKON_HOME/spider 目录下。

新建虚拟环境以后会自动激活虚拟环境。若是咱们平时想要进入某个虚拟环境,能够用下面的命令。

 
$ workon spider     #切换到 spider 的python环境
$ workon env34 #切换到 python 3.4 的python环境
$ workon env27 #****
 

这也就是为何环境变量中存放虚拟环境的目录为啥叫作 WORKON_HOME。顺便说一句,workon 后面但是能够支持用 tab 自动补全的哟。

一样,离开虚拟环境,可使用。

 
deactivate
 

另外,删除虚拟环境也同样简单。

 
rmvirtualenv spider
 

结束

到这里,virtualenvvirtualenvwrapper 的基本使用就介绍完了,须要了解更多用法,能够参考官方文档哟。但愿这两个工具可以帮助小伙伴们在工做中提升效率哟~~

相关文章
相关标签/搜索