When writing this, Ubuntu's default python package is 3.8, I like running the latest version of everything so this is how I do it.

My preference is to have the latest version of python run via the python command. In order to achieve this on a fresh install of Ubuntu 20.04 LTS follow these simple steps.

To install the latest version of Python 3.9 on Ubuntu 20.04:

Firstly we'll need to add the deadsnakes ppa to our repo list:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install python3.9

Once that is completed python 3.9 should be installed & you should be able to run python3.9 -V to verify:

Scotty$ python3.9 -V
Python 3.9.6

Now let's install pip for 3.9

wget https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.9 get-pip.py

Defaulting to user installation because normal site-packages is not writeable
Collecting pip
  Using cached pip-21.2.2-py3-none-any.whl (1.6 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.2.2
    Uninstalling pip-21.2.2:
      Successfully uninstalled pip-21.2.2
  WARNING: The scripts pip, pip3 and pip3.9 are installed in '/home/scotty/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-21.2.2

For now we can ignore the PATH warning as we're going to fix it by adding the alias to the .bashrc file.

Now to create an alias in ~/.bashrc

Let's edit the .bashrc file and add some alias lines

sudo nano ~/.bashrc

I added the following code below # some more ls aliases in the file:

# Python / pip Alias
alias python='/usr/bin/python3.9'
alias pip='~/.local/bin/pip3.9'

This will point the command python to our installed 3.9 version and same with pip.

Save that and then run the following to reload bashrc:

source ~/.bashrc

That's it!

We should now get the following when we run python -V & pip -V

Scotty$ python -V
Python 3.9.6
Scotty$ pip -V
pip 21.2.2 from /home/scotty/.local/lib/python3.9/site-packages/pip (python 3.9)

Post Install Notes

If after you've done this, you run sudo apt update and you get an error with apt-pkg. You may have an issue with how it's handling python3 commands. Check your alternatives:

scotty$ update-alternatives --config python3
There is only one alternative in link group python3 (providing /usr/bin/python3): /usr/bin/python3.9
Nothing to configure.

Just fix it by adding python3.8 back into the alternatives:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2

Now configure by choosing python3.8, in my case below it was number 1:

scotty$ sudo update-alternatives --config python3

There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.9   2         auto mode
  1            /usr/bin/python3.8   1         manual mode
  2            /usr/bin/python3.9   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python3 (python3) in manual mode