在 Python 中,我们经常需要使用到很多库,Python 会这么流行和它的库非常丰富有极大的关系。但是,我们可能不同的项目使用的库版本是不同的,虽然很多库是兼容旧版的,但是,万一哪天遇到一些不兼容旧版的库,那可能就会被害惨了。正是因为这些需求,所以 python 社区中有一个叫做 virtualenv 的工具,它可以物理隔离各个项目的运行环境,保证各个项目使用自己需要的库,而互不干扰。

但是,virtualenv 还稍显麻烦,例如当我要使用某个虚拟环境的时候,那么需要敲这样的命令:

source /home/www/flasky/env/bin/activate


然后再安装各种库。

因为 virtualenv 的一些不方便,所以增强版virtualenvwrapper 就出来了。
virtualenvwrapper 对 virtualenv 进行了封装,然后提供了更简便的 新建/启用/管理/销毁 的操作体验。

安装 virtualenvwrapper

安装 virtualenvwrapper 很简单,就和安装 virtualenv 一样简单:

$ sudo pip install virtualenvwrapper


安装完之后,然后设置一下虚拟环境的目录,也就是说以后的虚拟环境都安装在这个地方了,我一般是设置在 ~/.bashrc 文件中:

$ vim ~/.bashrc


然后在里面填入一下内容:

if [ `id -u` != '0' ]; then                                                
  export VIRTUALENV_USE_DISTRIBUTE=1        # <-- Always use pip/distribute
  export WORKON_HOME=$HOME/.virtualenvs       # <-- Where all virtualenvs will be stored                                                          
  source /usr/local/bin/virtualenvwrapper.sh                           
  export PIP_VIRTUALENV_BASE=$WORKON_HOME                              
  export PIP_RESPECT_VIRTUALENV=true                                    
fi                        


这个配置做了配置 virtualenvwrapper 要做的唯二操作,分别是:

  1. 设置 WORKON_HOME
  2. 执行命令 source /usr/local/bin/virtualenvwrapper.sh

现在 virtualenvwrapper 就算是安装配置完全了,尝试一下:

$ mkvirtualenv my_project_venv
$ workon my_project_venv
$ deactivate
$ rmvirtualenv my_project_venv


就这样,一个虚拟环境从创建、应用到退出,一条简短的命令使用。

后续

这篇文章介绍的都是一些比较常用的 virtualenvwrapper 的用法,肯定的,作为virtualenv 的增强版,肯定功能比这个丰富得多,例如我们可以在创建虚拟环境之后更新一下 pip啊,可以添加这一句:

echo 'pip install --upgrade pip' >> $WORKON_HOME/postmkvirtualenv


这样以后每次创建新环境都会保持 pip 的最新版,这样对于我这种有更新强迫症的人来说再好不过了。

还有更多有趣的功能,可以参考后面的参考资料中的链接了解。

dependence