管理多Python环境之Virtualenv与Virtualenvwrapper

在《Django最佳实践与部署》一文中我曾提到过用virtualenv创建虚拟环境的好处。今天将结合virtualenvwrapper—virtualenv的终极伴侣,来具体谈一谈如何利用虚拟环境提高开发效率。

为什么要使用virtualenv和virtualenvwrapper

作为一个完美主义者,不喜欢看到系统site-packages放着各种各样Python包。很多包只是因为某个项目需要,而根本没有必要放在全局。我喜欢virtualenv这种相互独立环境的概念,就好像有很多房间,每个房间可以有不同装饰,拥有自己个性。

virtualenv安装

$ pip install virtualenv

创建环境

$ virtualenv ENV      # 创建名为‘ENV‘的虚拟环境$ New python executable in ENV/bin/python$ Installing setuptools, pip...done.

这样就成功创建好一个python的虚拟环境,实际上他为你建立了三个目录:

bin include lib

这里面包含一个Python环境(默认为系统Python的版本),一些基本工具(如easy_install和pip)以及一些symbolic link。而以后的package都会装到lib/pythonX.X/site-packages里面。

激活环境

使用虚拟环境之前必须激活,不然package还是会装到系统的site-packages里面。

$ source bin/activate

激活成功后,prompt左边会出现一个括号,里面对应就虚拟环境的名字。这个时候就代表激活成功了,而此时用pip安装任何包都会装到虚拟环境的site-packages,对其他项目和系统Python环境都完全不影响。

注销环境

如果想退出虚拟环境,也很简单。

$ deactivate

更多设置

请参考virtualenv的官方文档

virtualenvwrapper

当virtualenv上手之后,我觉得效率提高很多。可是随着虚拟环境数目增多又遇到一个问题。每次切换环境的过程显得非常繁琐:deactivate一个环境,cd到另外一个目录,source bin/activate。virtualenvwrapper正是为了解决这个问题出现:集中管理多个虚拟环境,快速切换。(支持tab completion!)

下面用一个动图来显示它的强大。(假设我现在有两个环境:demo_env1demo_env1

安装 & 设置

同样使用pip安装

$ pip install virtualenvwrapper

环境变量设置。把下面几行加入.bashrc.bash_profile

export WORKON_HOME=$HOME/.virtualenvs    # 放所有虚拟环境的地方export PROJECT_HOME=$HOME/Devel          # 放所有项目的地方source /usr/local/bin/virtualenvwrapper.sh

使用

mkvirtualenv命令创建一个新的虚拟环境

$ mkvirtualenv mynewenvNew python executable in mynewenv/bin/pythonInstalling distribute.................................................................................................................................................................................done.(mynewenv)$ workonmynewenv(mynewenv)$

这样会在WORKON_HOME也就是默认的~/.virtualenvs下创建一个名为mynewenv的virtualenv。我不喜欢这种工作模式,因为对于一个把所有项目都放在单独一个目录的人来说(比如~/Projects),我不想让virtualenvwrapper打破原有的习惯。还好virtualenvwrapper提供了不错的项目管理功能。

$ mkproject mynewnenvNew python executable in mynewnenv/bin/pythonInstalling setuptools, pip...done.Creating ~/Devel/mynewnenvSetting project for mynewnenv to ~/Devel/mynewnenv(mynewnenv)~

这样会在WORKON_HOME创建虚拟环境,在PROJECT_HOME创建项目目录。这正是我想要的效果:所有的虚拟环境在一处(WORKON_HOME),所有的项目在另一处(PROJECT_HOME)。pip安装的时候会将所有包装到当前激活的虚拟环境中,就实现了看似分离,实际又是统一的效果。

为已有项目添加虚拟环境

为已存在项目添加虚拟环境也十分容易。(当然前提是已经创建好待添加的虚拟环境才可以绑定)

$ setvirtualenvproject ~/.virtualenvs/mynewenv ~/Devel/myprojectSetting project myproject to ~/Devel/myproject$ workon myproject(myproject)~

其他常用命令(全部支持tab completion) workon 切换到环境 deactivate 注销当前环境 lsvirtualenv 列出所有环境 rmvirtualenv 删除环境 cpvirtualenv 复制环境 cdsitepackages cd到当前环境的site-packages目录 lssitepackages 列出当前环境中site-packages内容 setvirtualenvproject 绑定现存的项目和环境 wipeenv 清除环境内所有第三方包扩展

virtualenvwrapper提供了几个template以供我们初始化新的项目:

virtualenvwrapper.bitbucket virtualenvwrapper.django virtualenvwrapper.github

这里详细介绍一下virtualenvwrapper.github,因为我对这个项目小有贡献。这个插件的作用是,当创建一个virtualenvwrapper的项目的时候,可以从指定的Github位置导入初始代码。

安装

可以通过

$ pip install virtualenvwrapper.github

来获取这个插件。但由于原作者没能继续维护这个项目,我建议直接用我的fork,下载github.py,复制到site-packages下的virtualenvwrapper目录即可。

使用方法

首先确保这个repo的链接存在:git@github.com:your_github_username/my_repo.git

$ export VIRTUALENVWRAPPER_GITHUB_USER=your_github_username  # 设置环境变量$ mkproject -t github my_repo

管理多Python环境之Virtualenv与Virtualenvwrapper was originally published by Liuyang Wan at 浏洋的博客 on April 04, 2014.

而更像是听见了天地间冥冥中的呼唤,

管理多Python环境之Virtualenv与Virtualenvwrapper

相关文章:

你感兴趣的文章:

标签云: