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.
-y option in apt informs command to set automatic yes to prompts.
$ sudo apt install python3.7 -y
Output $ 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 python3.7-minimal 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 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 libpython3.7-minimal amd64 3.7.7-1+bionic1 [596 kB] Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-lib2to3 all 3.6.9-1~18.04 [77.4 kB] Get:3 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 python3.7-minimal amd64 3.7.7-1+bionic1 [1,839 kB] Get:4 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-distutils all 3.6.9-1~18.04 [144 kB] Get:5 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 libpython3.7-stdlib amd64 3.7.7-1+bionic1 [1,784 kB] Get:6 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu 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 https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz --2020-03-17 16:19:44-- https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz Resolving www.python.org (www.python.org)... 184.108.40.206, 2a04:4e42:2::223 Connecting to www.python.org (www.python.org)|220.127.116.11|: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/python-config.sh 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/_sysconfigdata_m_linux_x86_64-linux-gnu.py rm -r /usr/local/lib/python3.7/lib-dynload/__pycache__ Creating directory /usr/local/share/man/man1 /usr/bin/install -c -m 644 ./Misc/python.man \ /usr/local/share/man/man1/python3.7.1 if test "xupgrade" != "xno" ; then \ case upgrade in \ upgrade) ensurepip="--altinstall --upgrade" ;; \ install|*) ensurepip="--altinstall" ;; \ esac; \ ./python -E -m ensurepip \ $ensurepip --root=/ ; \ fi 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.