CentOS Software Collections (SCL)

Software Collections (SCL) is a CentOS repository that provides a set of dynamic programming languages, database servers, and various related packages. Provided software versions are […] more recent than their equivalent versions included in the base CentOS distribution […] Packages available from the SCL […] can be optionally enabled per application by using supplied scl utility.

Available SCLs and their Packages

To list all Software Collections installed on the development nodes, use:

[alice@dev3 ~]$ scl --list
devtoolset-4
devtoolset-6
devtoolset-7
devtoolset-8
llvm-toolset-7
python33       # DEPRECATED per 2019-11-13
rh-python34    # DEPRECATED per 2019-11-13
rh-python36    # DEPRECATED per 2019-11-13
rh-ruby25

[alice@dev3 ~]$ 

Importantly, only a subset of the above SCLs are available also on the compute nodes. Specifically, these are:

python33       # DEPRECATED per 2019-11-13
rh-python34    # DEPRECATED per 2019-11-13
rh-python36    # DEPRECATED per 2019-11-13

To list all the packages that are part of one or more of these SCLs, use:

[alice@dev3 ~]$ scl --list rh-python36
rh-python36-python-setuptools-36.5.0-1.el7.noarch
rh-python36-python-devel-3.6.3-3.el7.x86_64
rh-python36-python-pip-9.0.1-2.el7.noarch
rh-python36-python-nose-1.3.7-3.el7.noarch
rh-python36-numpy-f2py-1.13.1-1.el7.x86_64
rh-python36-scipy-0.19.1-2.el7.x86_64
rh-python36-runtime-2.0-1.el7.x86_64
rh-python36-numpy-1.13.1-1.el7.x86_64
rh-python36-python-libs-3.6.3-3.el7.x86_64
rh-python36-python-3.6.3-3.el7.x86_64

[alice@dev3 ~]$ 

Using SCLs

The current core-software installation provides stable but not necessarily the most up-to-date versions of Python, e.g.

[alice@dev3 ~]$ python --version
Python 2.7.5

[alice@dev3 ~]$ python3 --version
Python 3.4.9

To use a newer version of Python provided by one of the above SCLs, prefix the python ... command (quoted) with scl enable <name>, e.g.

[alice@dev3 ~]$ scl enable rh-python36 "python --version"
Python 3.6.3

[alice@dev3 ~]$ scl enable rh-python36 "python3 --version"
Python 3.6.3

Importantly, this approach of prefixing the original command call works also in job scripts.

If you work interactively on one of the development nodes, you can also launch a new shell (typically Bash) with one or more SCLs enabled:

[alice@dev3 ~]$ scl enable rh-python36 $SHELL

[alice@dev3 ~]$ python --version
Python 3.6.3

[alice@dev3 ~]$ python3 --version
Python 3.6.3

To “unload” these SCLs, just return to the previous shell by exiting new SCL-enabled shell, i.e.

[alice@dev3 ~]$ exit

[alice@dev3 ~]$ python --version
Python 2.7.5

See Also