使用pyenv部署多版本Python环境

目录
  1. 1. pyenv的功能
  2. 2. pyenv的安装
    1. 2.1 MacOS X
    2. 2.2 其它类Linux系统
  3. 3. pyenv的使用
    1. 3.1 安装不同版本的Python
    2. 3.2 指定某目录下的Python版本
    3. 3.3 指定当前shell使用的Python版本
    4. 3.4 列出本机可用的Python版本

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

在开发Python程序时,往往需要在同一主机上安装不同版本的Python来测试程序。pyenv可以满足这种需求。它可以在单主机上安装多个版本的Python,并且可以在这些版本中自由切换。

1. pyenv的功能

  • 安装各种版本的Python解释器
  • 切换各种版本的Python解释器
  • 通过插件可以管理python虚拟环境(相当于一个独立的版本)

2. pyenv的安装

有多种方式可以安装pyenv,这里介绍两种较简便的方式:

2.1 MacOS X

可以通过Homebrew安装:

1
2
$ brew update
$ brew install pyenv

2.2 其它类Linux系统

可以通过automatic installer进行安装:
首先,通过您使用的Linux发行版的包管理器安装git,然后通过如下命令安装pyenv:

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

安装完成后,可以通过pyenv version命令测试安装是否正常,如果输出如下,便说明安装正常:

system (set by /home/your_username/.pyenv/version)

3. pyenv的使用

完整的用法请参考Command Reference
这里给出几个pyenv使用的例子:

3.1 安装不同版本的Python

首先,安装完pyenv后,想通过其安装不同版本的Python解释器,可以先查看pyenv支持管理的Python版本,包括Anaconda, Jython, pypy, and stackless等,通过如下命令:

$ pyenv install --list

然后安装某个特定的Python版本,可以通过如下命令:

$ pyenv install 2.7.6
$ pyenv install 2.6.8

上面的命令最后一个参数可以是pyenv install --list命令输出的任何版本。上面的命令pyenv首先会连接Python的官网来下载相应版本的源代码,然后其在本地进行编译安装。所以在使用pyenv install 2.7.6命令之前,需要确保本机安装了编译工具包(redhat系列发行版可以通过sudo yum groupinstall development命令安装)。
然而,从官网下载源码包实在是太慢了!可以通过国内的镜像将Python源码包下载到本地,然后将其保存到$PYENV_ROOT/cache/目录(如果该目录不存在需要先创建),下面是一个这种方式的例子:

wget http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz -P ~/.pyenv/cache/ && pyenv install -v 3.5.2

上面的命令先通过wget在sohu的镜像下载源码,保存到$PYENV_ROOT/cache/中,然后执行安装,-v参数显示安装过程的详细信息。也可以通过设置PYTHON_BUILD_MIRROR_URL环境变量的方式来设置镜像。
如果以上的方法都不好用,可以自己通过源码编译,确保使用了–prefix=$(pyenv root)/versions/3.1.5的编译选项,将编译后的可执行文件安装到version目录下的版本号命名的目录(这里是3.1.5),这样便可以通过pyenv便可以将该版本也纳入管理。
在安装完成新版本的Python之后,需要运行:

$ pyenv rehash

3.2 指定某目录下的Python版本

进入某个目录后,执行pyenv local 2.7.6命令,便可以指定进入当前目录后使用的某个Python版本。如果不加最后的参数,是列出该目录中使用的Python版本。

3.3 指定当前shell使用的Python版本

在任何位置执行pyenv shell 2.7.6命令,便指定了当前shell所使用的Python版本,它会覆盖通过pyenv local x.x.x命令指定的某目录使用的Python版本。
如果不加最后的参数,也是列出当前shell使用的Python版本。

3.4 列出本机可用的Python版本

命令pyenv versions列出本机可以使用的Python版本,前面的*表示当前使用的版本:

1
2
3
4
5
6
[yangdong@centos7 httpie]$ pyenv versions
system
3.2.6
* 3.5.2 (set by /home/yangdong/httpie/.python-version)
3.5.2/envs/virtual-env-3.5.2
virtual-env-3.5.2