Set Python version with update-alternatives

Normally Python users use a non-system Python distribution such as Miniconda. These Python distributions typically allow easy switching between Python version.

However, where system Python must be used, the default Python version can be switched persistently with update-alternatives.

Update-alternatives without sudo

  1. (one-time) Setup Bash shell to use ~/.local/bin instead of system-wide /usr
    mkdir ~/.local/bin
    

    Edit ~/.bashrc, adding the line:

    export PATH="$HOME/.local/bin:$PATH"
    
  2. Example: (one-time setup) enable switching Python default between Python 3 and 2.7 (useful for Raspberry Pi on Raspbian 9.1)
    update-alternatives --install $HOME/.local/bin/python python /usr/bin/python3 20 
    
    update-alternatives --install $HOME/.local/bin/python python /usr/bin/python2 10 
    
  3. At any time, select the default system Python version with
    update-alternatives --config python
    

System Python update-alternatives

If update-alternatives is used with system Python, apt update may fail. This is usually only an issue for old Linux distributions such as Debian Stretch (with Raspberry Pi). Just temporarily switch back to Python 2 as default if this becomes an issue.

Notes

Pip update-alternatives is NOT needed

You might expect something like --slave /usr/bin/pip pip /usr/bin/pip2 to be part of the python2 and python3 config. However, pip is a script with the shebang #!/usr/bin/python that is already affected by update-alternatives --config python. Therefore, we do NOT use --slave with Python --install.

Fix Ubuntu 17.04 apt install

Ubuntu 17.04 was giving errors on apt install or apt upgrade any program. The syntax errors were due to Python 3 being the default in Ubuntu 17.04, even though I had already installed Python 2.

I fixed this issue by using update-alternatives with Python 2.7 as above.

Tags: , ,

Categories:

Written by Michael Hirsch, Ph.D. //

Comments