virtualenv

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:

  1. 在没有权限的情况下安装新套件
  2. 不同应用可以使用不同的套件版本
  3. 套件升级不影响其他应用

一、安装

安装easy_install

sudo yum -y install python-setuptools

安装pip

sudo easy_install pip

安装virtualenv

sudo pip install virtualenv

二、使用

  1. 建立虚拟环境

    virtualenv [指定虛擬環境的名稱]
    

    例如下列指令会建立名称为“ENV”的虚拟环境

    virtualenv ENV
    

    默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 --no-site-packages建立虚拟环境

    virtualenv --no-site-packages [虚拟环境名称]
    
  2. 启动虚拟环境

    cd ENV
    source ./bin/activate
    

    注意此时命令行会多一个(ENV),ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。

  3. 退出虚拟环境

    deactivate
    
  4. 在虚拟环境中安装新的Python套件

    Virtualenv 附带有pip安装工具,因此需要安装的套件可以直接运行:

    pip install [套件名称]
    

    如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:

    export PIP_REQUIRE_VIRTUALENV=true
    

    或者让在执行pip的时候让系统自动开启虚拟环境:

    export PIP_RESPECT_VIRTUALENV=true
    

    避免意外将套件安装至系统环境

  5. 从程序中指定使用虚拟环境的函数库

    无法从Shell启动虚拟环境的情况,像是使用mod_python或mod_wsgi,这时可以在Python的程序中加上:

    activate_this = '/path/to/env/bin/activate_this.py'
    execfile(activate_this, dict(__file__=activate_this))
    

    来使用安装在虚拟环境中的packages。

三、延伸套件:Virtualenvwrapper

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

  • 将所有虚拟环境整合在一个目录下
  • 管理(新增,删除,复制)虚拟环境
  • 切换虚拟环境
  1. 安装

    sudo pip install virtualenvwrapper
    

    把下面这句加到~/.bashrc里面,如不嫌麻烦,也可以每次都手动执行。

    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/bin/virtualenvwrapper.sh
    

    运行

    source ~/.bashrc
    

    此时virtualenvwrapper就可以使用了。

  2. 使用方法

    列出虚拟环境列表

    workon
    

    也可以使用

    lsvirtualenv [-b] [-l] [-h]
    

    新建虚拟环境

    mkvirtualenv [虚拟环境名称]
    

    完整命令

    mkvirtualenv [-i package] [-r requirements_file] [virtualenv options] ENVNAME
    

    启动/切换虚拟环境

    workon [虚拟环境名称]
    

    删除虚拟环境

    rmvirtualenv [虚拟环境名称]
    

    复制虚拟环境

    cpvirtualenv ENVNAME TARGETENVNAME
    

    离开虚拟环境

    deactivate
    

Virtualenvwrapper 的功能當然不只如此,更多功能可以參考 Virtualenvwrapper 的官方文件


Comments

comments powered by Disqus