RHEL 8 中不再默认 Python 版本。

一、Windows环境

简介

CentOS系统安装Python2.7有两种方式:

  1. 源码安装
  2. YUM安装

网上大部分教程都是通过源码安装,首先安装比较麻烦,源码安装后还不包含pip,setuptools等工具,需要单独安装。安装过程还会碰到各种疑难杂症。
YUM安装,CentOS6版本默认没有python27的rpm包,需要通过其他第三方repo获取安装包。

 图片 1

首先当然是安装你需要的两个不同版本的python,我安装的是2.7和3.4的,两个版本安装顺序无所谓,但是后面安装的会变成默认的(因为我是后安装的python
3.4,它就变成了默认的python)。

源码安装

# wget
https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
# tar xf Python-2.7.12.tgz
# cd Python-2.7.12
# ./configure –prefix=/usr/local/python27
# make
# make install

包括 RHEL 在内的大多数 Linux
发行版,用户除非离开系统的包管理器环境,否则一般是被默认限定在系统提供的
Python 版本中。对于像 Ruby、Node、Perl 与 PHP
在内的许多工具来说这都是习以为常的,但是 Python
的情况会比较复杂一些,因为许多 Linux 工具(如 yum)都直接依赖于
Python。

然后去python27
文件夹下面把python.exe改名python2.exe,然后就可以在命令行下通过python或者py来调用3.x,python2来调用2.x。

YUM安装

需要使用到RHEL/CentOS提供的SCL源(软件集)

根据 PEP 394,目前 /usr/bin/python 默认是指 Python2,也就是
“Python”这一命令或者 Python 解释器将默认指向 Python2 版本。

另外pip的话直接使用 pip2 或者 pip3 就可以了。

配置 SCL 源

# yum install centos-release-SCL
# yum install scl-utils-build
# yum –disablerepo=”*” –enablerepo=”centos-sclo-rh” list
# yum install python27 -y

Red Hat
官方在其开发者博客中发文称,针对这一点,为了改善用户体验,从 RHEL
8 Beta 开始不再强调“系统 Python”,不再默认一个 Python
版本。他们使用模块化的 Application Streams 设计,结合 Python
可多版本同时安装的特点,将为用户提供多个版本 Python
的选项,并且可以从标准存储库轻松安装到标准位置,用户可以选择他们想要在任何给定用户空间中运行的
Python 版本。

二、Linux(Centos为例)环境

配置Python27以来的系统模块

# find / -name libpython2.7.so.1.0
/opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0
# echo ‘/opt/rh/python27/root/usr/lib64/’ >
/etc/ld.so.conf.d/python27.conf
# /sbin/ldconfig
# /sbin/ldconfig –v

Application Streams 是在 RHEL 8
中引入的一类存储库,它提供用户可能希望在给定用户空间中运行的所有应用程序,它是在物理存储库中创建的多个虚拟存储库。

安装Pyenv
1.git clone git://github.com/yyuu/pyenv.git ~/.pyenv2.echo ‘export
PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bashrc
3.echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.bashrc
4.echo ‘eval “$(pyenv init -)”‘ >> ~/.bashrc
5.exec $SHELL -l
安装Python

验证Python27

# /opt/rh/python27/root/usr/bin/python2.7
Python 2.7.8 (default, Oct 22 2016, 09:02:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type “help”, “copyright”, “credits” or “license” for more
information.
>>>

这种变化之后,用户想要使用 Python,需要直接指定 Python3 或者
Python2,而不是直接 Python。同时 yum install python
将返回 404,因为它同样需要指定安装版本。建议使用 yum install @python36
或 yum install @python27 安装推荐软件包,而如果只需要 Python
二进制文件,则可以使用 yum install python3 或 yum install
python2。此外,pip 等工具也有变化,比如 Python3 将安装在 pip3
路径下,而不是没有版本指定的 pip 路径。

查看可安装的版本

Red Hat
解释,除了提升用户体验,这种方案还让方便了系统维护人员,因为不会被锁定在系统中老版本的
Python 上,那么他们可以自由地利用新版本的语言功能与性能改进等优势。

1.pyenv install
–list该命令会列出可以用pyenv安装的Python版本,仅列举几个:

(文/开源中国)    

1.2.7.8   # Python 2最新版本2.3.4.1 # Python 3最新版本
3.anaconda-2.0.1 # 支持Python 2.6和2.7
4.anaconda3-2.0.1 # 支持Python 3.3和3.4
其中形如x.x.x这样的只有版本号的为Python官方版本,其他的形如xxxxx-x.x.x这种既有名称又有版本后的属于“衍生版”或发行版。

安装Python的依赖包
在安装Python时需要首先安装其依赖的其他软件包,已知的一些需要预先安装的库如下。

在CentOS/RHEL/Fedora下:

1.sudo yum install readline readline-devel readline-static2.sudo yum
install openssl openssl-devel openssl-static
3.sudo yum install sqlite-devel
4.sudo yum install bzip2-devel bzip2-libs

安装指定版本

使用如下命令即可安装python 3.4.1:

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

对于科研环境,更推荐安装专为科学计算准备的Anaconda发行版,pyenv install
anaconda-2.1.0安装2.x版本,pyenv install anaconda3-2.1.0安装3.x版本;

Anacoda很大,用pyenv下载会比较慢,可以自己到Anaconda官方网站下载,并将下载得到的文件放在~/.pyenv/cache目录下,则pyenv不会重复下载。

更新数据库

安装完成之后需要对数据库进行更新:

1.pyenv rehash查看当前已安装的Python版本
1.$ pyenv versions2.* system (set by /home/seisman/.pyenv/version)
3.3.4.1
其中的星号表示当前正在使用的是系统自带的python。

设置全局的Python版本
1.$ pyenv global 3.4.12.$ pyenv versions
3.system
4.* 3.4.1 (set by /home/seisman/.pyenv/version)
当前全局的python版本已经变成了3.4.1。也可以使用pyenv local或pyenv
shell临时改变python版本。

确认Python版本

1.$ python2.Python 3.4.1 (default, Sep 10 2014, 17:10:18)
3.[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
4.Type “help”, “copyright”, “credits” or “license” for more
information.
5.>>>

使用Python

输入python即可使用新版本的python;

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