Cómo instalar Python 3 en RHEL 7 (y CentOS 7)

Tanto RHEL 7 como sus derivados (CentOS, Fedora…) tienen una gran dependencia de Python a nivel funcional de sistema operativo. ¿Qué supone esto? Que si actualizamos la versión de Python a nivel global de sistema lo más probable es que este quede en un estado inconsistente. Esto sucede tanto en RHEL y CentOS 7 como en el resto de versiones.

¿Qué hacemos entonces si quiero utilizar una versión superior de Python? En ese caso lo que hay que hacer es utilizar las colecciones de software que ofrece Red Hat bajo el nombre de Software Collections (SCL) y que permiten instalar en una shell independiente, algo así como un chroot, otras versiones de determinados productos, entre ellos Python.

Cómo instalar las Software Collections (SCL)

Instalar estas colecciones de software es muy sencillo, únicamente hay que instalar por yum el paquete correspondiente:

CentOS

# yum install centos-release-scl scl-utils-build

RHEL

# yum-config-manager --enable rhel-server-rhscl-7-rpms
# yum install scl-utils

Cómo instalar Python 3 en RHEL/CentOS 7

Recordad que esto valdría también, por ejemplo, para instalar Python 2.7 en RHEL y Centos 6. En este caso, lo que vamos a hacer es instalar Python 3.5 en RHEL/CentOS 7, que por defecto trae 2.7:

# yum install python35

Cómo ejecutar python 3

Aunque lo hayáis instalado, por defecto veréis que esta versión de Python no está disponible. Recordad que python es parte del core del sistema operativo de Red Hat y CentOS, por lo que actualizar la versión supondría muchos fallos a nivel de sistema. Para ejecutar python 3, hay que abrir una nueva shell scl, aquello que os decía antes que era como un «chroot». El comando a ejecutar es el siguiente:

$ scl enable python33 bash

A partir de ese momento, podéis utilizar python 3:

$ python --version
Python 3.5.1

Recordad que lo habilitáis en una nueva shell. En cuanto salgáis de la misma, dejará de estar activo. También se pueden ejecutar directamente comandos en Python 3 sin tener que entrar a la shell, en lugar de bash especificad el comando a ejecutar:

$ scl enable python27 - << \EOF
echo "test"
python test.py
EOF

Otro ejemplo:

$ scl enable python27 "python test.py"