Set Python version with update-alternatives

1 minute read

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 your 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


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.

Leave a Comment