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 without sudo
- (one-time) Setup Bash shell to use
~/.local/bininstead of system-wide
~/.bashrc, adding the line:
- 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
- At any time, select the default system Python version with
update-alternatives --config python
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.
Pip update-alternatives is NOT needed
You might expect something like
--slave /usr/bin/pip pip /usr/bin/pip2 to be part of the
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
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.