Install Python 3.7 on Ubuntu 18.04 LTS

install python 3.7 on ubuntu 18.04

Python is one of the most popular and on-demand general-purpose programming language. It is an interpreted, high-level programming language that supports multiple programming paradigms which includes procedural, object-oriented, and functional programming. It is often described as a "batteries included" language due to its comprehensive standard library.

It is widely used and extremely versatile programming language as it is used by beginners to scientists for different types of activities. It is used for system programming and scripting, automating repetitive tasks, building websites and web applications, machine learning algorithms, data analysis and much more.

In this tutorial, we'll be learning how we can install Python 3.7 in Ubuntu 18.04 LTS Bionic Beaver. We'll be including two major ways of installing it in an Ubuntu 18.04 machine, one is through deadsnakes PPA using APT package manager, whereas another is by compiling through source.

Install Python 3 .7 on ubuntu using APT (with PPA)

By default on Ubuntu 18.04 comes with Python 3.6.9. By running the following command you can get python version:

python3 --version
Python 3.6.9

First of all, we'll need to make sure to update Ubuntu's package repository index of our Ubuntu 18.04 machine. This can be done by executing the following command :

$ sudo apt update

Once the update is done, we'll need to make sure that 'software-properties-common' package is installed in our machine sot that we can add a PPA into our machine.

$ sudo apt install software-properties-common

Now, we can easily add the deadsnakes PPA using the following command:

$ sudo add-apt-repository ppa:deadsnakes/ppa

Finally, as the required PPA is added into our Ubuntu 18.04 machine, we can now simply use apt command to install Python 3.7.

The -y option in apt informs command to set automatic yes to prompts.

$ sudo apt install python3.7 -y
$ sudo apt install python3.7 -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3.7-minimal libpython3.7-stdlib python3-distutils python3-lib2to3
Suggested packages:
  python3.7-venv python3.7-doc binfmt-support
The following NEW packages will be installed:
  libpython3.7-minimal libpython3.7-stdlib python3-distutils python3-lib2to3
  python3.7 python3.7-minimal
0 upgraded, 6 newly installed, 0 to remove and 321 not upgraded.
Need to get 4,792 kB of archives.
After this operation, 26.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 bionic/main amd64 libpython3.7-minimal amd64 3.7.7-1+bionic1 [596 kB]
Get:2 bionic-updates/main amd64 python3-lib2to3 all 3.6.9-1~18.04 [77.4 kB]
Get:3 bionic/main amd64 python3.7-minimal amd64 3.7.7-1+bionic1 [1,839 kB]
Get:4 bionic-updates/main amd64 python3-distutils all 3.6.9-1~18.04 [144 kB]
Get:5 bionic/main amd64 libpython3.7-stdlib amd64 3.7.7-1+bionic1 [1,784 kB]
Get:6 bionic/main amd64 python3.7 amd64 3.7.7-1+bionic1 [351 kB]
Fetched 4,792 kB in 7s (737 kB/s)                                              
Selecting previously unselected package libpython3.7-minimal:amd64.
(Reading database ... 134446 files and directories currently installed.)
Preparing to unpack .../0-libpython3.7-minimal_3.7.7-1+bionic1_amd64.deb ...
Unpacking libpython3.7-minimal:amd64 (3.7.7-1+bionic1) ...
Selecting previously unselected package python3.7-minimal.
Preparing to unpack .../1-python3.7-minimal_3.7.7-1+bionic1_amd64.deb ...
Unpacking python3.7-minimal (3.7.7-1+bionic1) ...
Selecting previously unselected package libpython3.7-stdlib:amd64.
Preparing to unpack .../2-libpython3.7-stdlib_3.7.7-1+bionic1_amd64.deb ...
Unpacking libpython3.7-stdlib:amd64 (3.7.7-1+bionic1) ...
Selecting previously unselected package python3-lib2to3.
Preparing to unpack .../3-python3-lib2to3_3.6.9-1~18.04_all.deb ...
Unpacking python3-lib2to3 (3.6.9-1~18.04) ...
Selecting previously unselected package python3-distutils.
Preparing to unpack .../4-python3-distutils_3.6.9-1~18.04_all.deb ...
Unpacking python3-distutils (3.6.9-1~18.04) ...
Selecting previously unselected package python3.7.
Preparing to unpack .../5-python3.7_3.7.7-1+bionic1_amd64.deb ...
Unpacking python3.7 (3.7.7-1+bionic1) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Setting up libpython3.7-minimal:amd64 (3.7.7-1+bionic1) ...
Setting up python3.7-minimal (3.7.7-1+bionic1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Setting up python3-lib2to3 (3.6.9-1~18.04) ...
Setting up python3-distutils (3.6.9-1~18.04) ...
Setting up libpython3.7-stdlib:amd64 (3.7.7-1+bionic1) ...
Setting up python3.7 (3.7.7-1+bionic1) ...

Now, in order to make sure if python was installed successfully, we can check python version as bellow.

$ python3.7 -V
Python 3.7.7

Install Python 3.7 on ubuntu from source

In this method, we'll be learning how we can install python 3.7 in our Ubuntu 18.04 machine by compiling it from the source code. To move ahead, we'll need to make sure that certain prerequisites are met. First, we'll need to make sure that the build tools required for compiling the source codes are installed in our machine.

In order to do so, we'll first need to update apt's local repository index as follows:

$ sudo apt update

As the local repository index has been updated, we'll now install the dependencies required for compiling and installing python3.7 . In order to do so, we'll need to execute the following command:

$ sudo apt install -y build-essential wget zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev

Once the dependencies are all installed and ready, we'll then download the latest release of Python 3.7 from the official python website using wget command as follows:

$ wget
--2020-03-17 16:19:44--
Resolving (, 2a04:4e42:2::223
Connecting to (||:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23161893 (22M) [application/octet-stream]
Saving to: ‘Python-3.7.7.tgz’

Python-3.7.7.tgz    100%[===================>]  22.09M  2.50MB/s    in 9.2s

2020-03-17 16:19:54 (2.41 MB/s) - ‘Python-3.7.7.tgz’ saved [23161893/23161893]

During the time of writing this tutorial, python 3.7 was released under the latest version 3.7.7 . So, we'll simply download and extract the tgz file using tar command.

$ tar -xf Python-3.7.7.tgz

After the source codes are extracted from the tgz file, we'll now cd into the directory and then execute the configure script in order to evaluate whether the required dependencies for compilation are fulfilled or not. The --enable-optimizations flag optimizes the python binary and increases the code execution by 10-20%.

$ cd Python-3.7.7
$ ./configure --enable-optimizations
checking if the dirent structure of a d_type field... yes
checking for the Linux getrandom() syscall... yes
checking for the getrandom() function... yes
checking for pkg-config... no
checking for openssl/ssl.h in /usr/local/ssl... no
checking for openssl/ssl.h in /usr/lib/ssl... no
checking for openssl/ssl.h in /usr/ssl... no
checking for openssl/ssl.h in /usr/pkg... no
checking for openssl/ssl.h in /usr/local... no
checking for openssl/ssl.h in /usr... yes
checking whether compiling and linking against OpenSSL works... yes
checking for X509_VERIFY_PARAM_set1_host in libssl... yes
checking for --with-ssl-default-suites... python
configure: creating ./config.status
config.status: creating Makefile.pre
config.status: creating Misc/python.pc
config.status: creating Misc/
config.status: creating Modules/ld_so_aix
config.status: creating pyconfig.h
creating Modules/Setup
creating Modules/Setup.local
creating Makefile

Once the configure script is executed successfully, we'll now install python 3.7 in our Ubuntu 18.04 LTS machine by executing make command with altinstall argument. The argument altinstall ensures that it's not installed as the system default python version.

$ sudo make altinstall
changing mode of /usr/local/bin/idle3.7 to 755
changing mode of /usr/local/bin/pyvenv-3.7 to 755
changing mode of /usr/local/bin/pydoc3.7 to 755
changing mode of /usr/local/bin/2to3-3.7 to 755
rm /usr/local/lib/python3.7/lib-dynload/
rm -r /usr/local/lib/python3.7/lib-dynload/__pycache__
Creating directory /usr/local/share/man/man1
/usr/bin/install -c -m 644 ./Misc/ \
if test "xupgrade" != "xno"  ; then \
	case upgrade in \
		upgrade) ensurepip="--altinstall --upgrade" ;; \
		install|*) ensurepip="--altinstall" ;; \
	esac; \
	 ./python -E -m ensurepip \
		$ensurepip --root=/ ; \
Looking in links: /tmp/tmp06ih2lq9
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-19.2.3 setuptools-41.2.0

Now, we can check whether python 3.7 was installed successfully by check its version as follows.

$ python3.7 -V
Python 3.7.7


Finally, we have successfully installed python 3.7 in our Ubuntu 18.04 LTS machine. As of writing this tutorial, the latest version of Python 3.7 was 3.7.7, so you may want to replace the version 3.7.7 with the latest version of the release. Now, we can easily execute python scripts and codes that was written for 3.7. If you have any questions, suggestions, feedback please write them in the comment box below.

Leave a Comment