ubuntu 14.04.5下安装多版本Python(2.7.6/3.4.3/3.6.4)

系统环境:ubuntu14.04.5 LTS,系统默认的python版本为2.7.4/3.4.3

但是实际工作中,某些通过pip安装的开发包需要不低于某个版本的python才能正常工作,比如ansible-2.4.2.0,明确只支持python-3.5以上的版本。在低版本的python上,无法正常运行。

而如果我们贸然更新系统python版本的话,会导致系统异常。因此我们借助pyenv实现基于用户的python版本定制。

安装pyenv

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

$ exec $SHELL -l

查看可以安装的python版本:

$ pyenv install --list

这里以安装python-3.6.4为例,首先安装依赖:

$ sudo apt-get install -y make build-essential

安装python

# 要求开启Python动态库的支持(默认是全部静态编译),否则在安装某些插件的时候会出现无法正常链接的情况,比如 mod_wsgi
$ export PYTHON_CONFIGURE_OPTS="--enable-shared"

$ pyenv install 3.6.4 -vvv

该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包之后重新执行该命令。

安装完成之后,需要使用如下命令对数据库进行更新:

$ pyenv rehash

查看当前已经安装的python版本

$ pyenv versions
* system (set by /home/xxx/.pyenv/version)
3.6.4

其中星号代表是当前系统正在使用的python版本是系统自带的。

设置全局的python版本

$ pyenv global 3.6.4

$ pyenv versions
  system
* 3.6.4 (set by /home/xxx/.pyenv/version)

从上面,我们可以看出来当前的python版本已经变为了3.6.4。也可以使用pyenv localpyenv shell临时改变python的版本。

如果需要还原设定的python版本为系统自带的版本,则执行如下命令:

$ pyenv global system

确认python版本

$ python
Python 3.6.4 (default, Jan  9 2018, 11:21:57) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.

上面的操作会导致在当前用户下,执行python或者python3命令的时候都会被定向到python-3.6.4,如果只想执行python3命令的时候被定向到python-3.6.4,则可以直接删除python这个链接:

# 注意,这个链接删除后,可能导致ros indigo的初始化异常,因此,这部分的改动要慎重

$ rm -rf ~/.pyenv/versions/3.6.4/bin/python

安装pip

$ wget https://bootstrap.pypa.io/get-pip.py

$ python3 get-pip.py

$ rm -rf get-pip.py

$ pip3 install --upgrade pip

安装完成之后,需要使用如下命令对数据库进行更新:

$ pyenv rehash
注意事项:
  • 输入python即可使用新版的python
  • 系统自带的脚本会以/usr/bin/python的方式直接调用老版本的python,因而不会对系统脚本产生影响
  • 使用pip安装第三方模块时会安装到~/.pyenv/versions/3.6.4下,不会和系统模块发生冲突
  • 使用pip安装模块后,可能需要执行pyenv rehash更新数据库

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注