pyenv最大的优点是:能够在”全局”管理不一样版本的Python, 能够随时配置当前的使用的Python版本,并对其余使用Python解释器的程序生效。
当系统安装多个版本的Python,使用pyenv切换是至关方便的。html
virtualenv建立的不是全局的Python环境,只是一个虚拟的工做环境, 一般用来为一个应用建立一套“隔离”的Python运行环境, 并且只有在激活某个自定义环境时,这个环境对应的Python版本和三方库才会生效。 相比pyenv它是更轻量级的,相似于容器的工做方式。 而pyenv只是对Python版本它的三方库进行分别管理,不能对每一个项目进行单独配置。python
若是开发者没有常常更改系统默认Python版本的需求,pyenv是不须要安装的。 可是对于项目开发而言,virtualenv基本上是必须的。 并且virtualenv能够建立任意版本的Python和三方库组合的环境,在大部分状况下使用起来彻底能够代替pyenv。nginx
virtualwrapper是对virtualenv的提高,对virtualenv指令进行的封装,使得使用更方便。sql
virtualenv 和 virtualwrapper须要使用pip安装, 所以自己就依赖于系统设定的Python解释器运行,而virtualwrapper更是依赖 VIRTUALENVWRAPPER_PYTHON这个环境变量指定python解释器的路径。api
1.使用前建立一个项目的独立目录ruby
mkdir projecttest cd projecttest
2.建立一个纯净的3.5版本python环境bash
➜ projecttest $: virtualenv pure_3_5 --no-site-packages --python=python3.5
下面是一些建立成功的输出信息,它拷贝了系统存在的3.5解释器,并安装了setuptools, pip, wheel这三个基本工具。app
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 Using base prefix '/Library/Frameworks/Python.framework/Versions/3.5' New python executable in /Users/Mike/Documents/projecttest/pure_3_5/bin/python3.5 Also creating executable in /Users/Mike/Documents/projecttest/pure_3_5/bin/python Installing setuptools, pip, wheel...done.
此时当前目录下出现pure_3_5目录工具
➜ projecttest $: ls
➜ projecttest $: pure_3_5
这个目录下的bin、include、lib分别对环境操做工具、依赖库、安装的库进行分别管理,其中bin目录下的activate脚本是对虚拟环境的激活程序, 它里面包含了”激活”和”退出指令的实现”并将当前的虚拟环境添加到系统环境变量中,能够经过执行这个脚原本激活当前的虚拟环境:ui
➜ projecttest $: source pure_3_5/bin/activate (pure_3_5) ➜ projecttest $:
这个时候能够按照项目需求安装须要的库:
(pure_3_5) ➜ projecttest $: pip install greenlet
安装的任何库都只会和当前的虚拟环境绑定,而不会影响到系统的Python环境。
查看一下当前已经安装的库:(pip、setuptools、wheel这三个是默认安装的)
(pure_3_5) ➜ projecttest $: pip list greenlet (0.4.12) pip (9.0.1) setuptools (36.7.2) wheel (0.30.0)
3.退出环境 可使用deactive退出当前环境
(pure_3_5) ➜ projecttest $: deactivate ➜ projecttest $:
virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它的主要亮点有:
1.能够将全部的虚拟环境整合到一个目录下,方便管理,而不是像virtualenv那样将虚拟环境放置在和项目同一个目录, 这样将每一个环境与项目剥离开,使得每一个环境的屡次使用很是方便。
2.能够很是方便地对虚拟环境进行添加、删除、复制等管理操做,还能够很方便地对使用的环境进行切换。
安装virtaulenvwrapper:(使用了系统默认pip)
# 安装以前必须确保已经安装了virtualenv pip3 install virtaulenvwrapper # Linux 须要使用sudo
在使用virtualenvwrapper以前,须要进行如下操做:
1.建立用来存放虚拟环境的目录
mkdir ~/.virtualenvs
2.添加如下环境变量(Linux能够在~/.bashrc添加 Mac能够在 ~/.bash_profile添加),以Mac为例:
export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 source /Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenvwrapper.sh
若是使用的是Linux,~/.bashrc应该是这样配置的:
export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh # 具体位置可经过which查找
3.载入刚刚添加的环境
# Mac source ~/.bash_profile # Linux source ~/.bashrc
这样virtualenvwrapper即可以使用了。下面是几个经常使用的操做:
mkvirtualenv # 新建虚拟环境 lsvirtualenv # 列出全部的虚拟环境 workon # 进入或者切换虚拟环境 deactivate # 退出当前虚拟环境 rmvirtualenv # 删除虚拟环境
例如,和刚才同样建立一个纯净的Python3.5环境:
➜ ~ $: mkvirtualenv --no-site-packages --python=python3.5 pure3_5 (pure3_5) ➜ ~ $:
这个命令会在设置的虚拟环境目录下(~/.virtualenvs)建立环境,并执行这个环境的activate脚本。
使用workon切换虚拟环境
workon pure3_5
Python3.3 开始推出了venv模块,官方地址为https://docs.python.org/3/library/venv.html,这个模块的api能够帮助你建立虚拟环境,它的使用方式和virtualenv基本相同,同时在解释器被安装时就增长了可执行接口,如Python3.6解释器安装时,提供了系统命令venv,源码以下:
#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 if __name__ == '__main__': import sys import pathlib executable = pathlib.Path(sys.executable or 'python3').name print('WARNING: the pyenv script is deprecated in favour of ' f'`{executable} -m venv`', file=sys.stderr) rc = 1 try: import venv venv.main() rc = 0 except Exception as e: print('Error: %s' % e, file=sys.stderr) sys.exit(rc)
不过目前来讲这个模块以及相关命令的使用较少,virtualenv和virtualenvwrapper的配合使用是至关方便的。