在学习node.js时,教程里面推荐了非常好用的版本管理工具nvm,此外,node还有npm管理包依赖关系,每个项目就有一个package.json记录包依赖关系,相关的包也直接放在工程目录下,隔离做的非常好。
python有虚拟环境可以用来隔离项目之间的包。在找到pyenv之前,我用的是virtualenvwrapper管理虚拟环境,但是还不知道怎么优雅地管理python版本。
安装pyenv
pyenv作者写了一个自动安装脚本,安装起来特别方便,直接运行:
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
然后,把:
# pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
放到.zshrc中,这样在shell启动的时候就可以自动加载pyenv了。
安装不同的python版本
首先,查看所有可以安装的python版本,运行:
pyenv install -l
可以看到所有可以安装的python版本,如果是cpython版本的,就只有一个版本号,其他如pypy,前面会加上pypy。
安装2.7.8版本,就运行:
pyenv install 2.7.8 -v
用pyenv versions
可以查看所有已经安装的python。
pyenv会默认使用系统的python,如果要把默认的python设置到刚才安装的2.7.8,运行:
pyenv global 2.7.8
虚拟环境virtualenv使用
pyenv自带了virtualenv的插件,创建python虚拟环境非常方便。比如说要创建一个基于python2.7.8的hello_world的虚拟环境,可以运行:
pyenv virtualenv 2.7.8 hello_world
想要查看所有的虚拟环境,可以运行:
pyenv virtualenvs
想要切换到这个环境,可以用:
pyenv activate hello_world
退出虚拟环境,运行:
pyenv deactivate hello_world
还有一个比较好用的功能是设置项目的虚拟环境,进入项目的目录,然后运行:
pyenv local hello_world
这条命令会在目录下生成一个.python-version的文件,记录了这个目录使用的虚拟环境。那么以后每次进入这个目录,都会默认切换到hello_world虚拟环境,并且所有的子目录也保持在hello_world环境中。如果退出了这个目录,又会切换回global的环境。
删除虚拟环境或者python版本:
bash
pyenv uninstall hello_world
或者直接到~/.pyenv/versions/, 把对应的包删掉就行。
使用下来,我感觉pyenv比virtualenvwrapper好用,除了能管理python版本,还能管理python虚拟环境。pyenv是用shell写的,不依赖python,安装上也更加方便。