1.2.3 多版本环境安装

经过上一小节的步骤,虽然已经可以正常地使用Python 3了,但由于Linux系统下存在Python多版本共存的问题,为了更好地解决多版本的管理和安装问题,本小节将介绍一种可以管理和安装Python多版本的工具——pyenv。

pyenv不仅支持Python 2和Python 3版本的共存,还支持Python 2.6、Python 2.7、Python 3.5、Python 3.7的共存,甚至还支持CPython与PyPy、Jython、IronPython、Anaconda、ActivePython等发行版的共存。

安装pyenv的操作甚至比安装Python本身更容易,你只需要几个命令就可以完成安装。下面是安装pyenv的完整Shell命令:

    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >>
~/.bash_profile
    source ~/.bash_profile

执行完上述命令之后,直接在命令行执行如下命令:

>> pyenv -v
pyenv 1.2.13-17-g38de38e

如果能正常返回pyenv的版本信息,则表示安装成功。那么接下来就可以通过pyenv来安装和管理Python的多版本了。通过pyenv -h命令可以查看pyenv的使用帮助信息,这里我们只对常用的几个命令进行介绍。

1. 安装命令install

pyenv的安装命令,除了可以安装各版本的Python,还可以查看支持安装的Python版本列表,只需在install命令之后添加-l/--list参数即可。该命令的使用方式如下:

>> pyenv install -l
Available versions:
  2.1.3
  2.2.3
  …
  3.7.3
  3.7.4
  3.7.5
  …

找到你想要安装的Python版本之后,还是通过install命令来进行安装,只需把列表中指定的版本号添加到install命令之后即可。具体方式如下:

>> pyenv install 3.7.5
Downloading Python-3.7.5.tar.xz...
-> https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tar.xz

通常在Linux系统中,如果安装Python所需的依赖库都存在,一般都可以安装成功。而如果在安装过程中出现失败的情况,那么很可能就是缺少依赖库的原因。在CentOS中可以通过如下命令来安装所需的依赖库:

>> yum install gcc zlib-devel bzip2 bzip2-devel readline-devel
sqlite sqlite-devel openssl-devel tk-devel libffi-devel

在完成依赖库的安装之后,还需要再次执行pyenv install 3.7.5命令来重新进行安装。如果你使用的是其他版本的Linux系统或者出现别的错误,那么也可以访问相关帮助页面来查找原因和解决方案。具体地址为:https://github.com/pyenv/pyenv/wiki。

2. 版本查看命令

当你安装完成一个版本之后,就可以通过版本查看命令来查看它。pyenv提供了两个版本查看命令:一个是version,另一个是versions。

■ version命令用来查看当前上下文环境中Python的版本。

■ versions命令用来查看全部已安装的Python版本。

在Python 3.7.5安装成功且未进行版本设置的前提下,version和versions命令的使用效果如下:

>> pyenv version
system (set by /root/.pyenv/version)
>> pyenv versions
* system (set by /root/.pyenv/version)
  3.7.5

其中,system版本代表的是Linux系统默认的Python版本。从version命令的返回信息可以知道,当前命令执行的Python上下文环境是系统默认的版本;从versions命令的返回信息可以知道,当前pyenv中已经管理了两个Python版本,一个是系统默认的版本,另一个是后续安装的Python 3.7.5版本。另外,在versions命令返回的信息中,头部标*的版本也正是version命令所返回的版本。

3. 版本设置命令

通过version相关命令,我们知道pyenv默认使用系统自带的Python版本作为上下文环境。如果我们希望使用其他Python版本作为程序运行的上下文环境,则需要通过版本设置命令来切换Python的上下文环境版本。pyenv提供了3种版本设置的命令,分别适用于不同的上下文环境范围。这3个版本设置命令分别如下。

■ local——设置当前目录及子目录的Python环境版本。

■ global——设置系统全局的Python环境版本,不包括已设置local的目录和子目录。

■ shell——设置当前Shell执行环境中的Python版本,一旦退出当前Shell则失效。

下面就用一组命令的使用示例来总结pyenv版本设置的效果,默认的前提条件是已经通过pyenv安装好了Python 3.7.5版本。具体的示例脚本如下:

>> cd ~
>> python -V
Python 2.7.5
>> pyenv local 3.7.5
>> python -V
Python 3.7.5
>> cd /home
>> python -V
Python 2.7.5
>> pyenv global 3.7.5
>> python -V
Python 3.7.5
>> cd /dev
>> python -V
Python 3.7.5 

如果读者对pyenv的版本切换还有些模糊,建议直接把本小节的Shell命令全部编写一遍来加深理解。

提示

由于pyenv global命令会影响全局的Python环境版本,所以在不太了解可能会造成的影响之前,不要轻易使用该命令,以免其他程序的Python依赖版本和库被误换,导致无法正常工作。

4. 卸载命令uninstall

有安装命令自然就有卸载的命令,pyenv卸载使用的是uninstall命令。与安装Python版本的方式基本一致,直接加上版本号即可。示例脚本如下:

>> pyenv uninstall 3.7.5

当然你可能还会有另一种需求,就是卸载pyenv本身。具体的做法非常简单,就是按照安装步骤进行反向操作即可,具体的步骤如下。

■ 删除~/. bash_profile中安装时追加的3行Shell代码。

■ 删除~/.pyenv目录。