在学习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,安装上也更加方便。



comments powered by Disqus