How to Install and Manage Python Versions in Linux

Manage Python Versions Featured

The Python programming language was introduced in 1991. In all these years, it has gone through many changes, with each version adding and removing various features. Due to these changes, software written in newer versions of Python may or may not work with older versions.

This version mismatch costs developer experience and productivity, so it’s important to learn how to manage Python versions installed on your computer to run them all efficiently. This tutorial shows you how to do that.

How to Install a Different Python Version

The easiest technique for Python version management is using the native package manager. Python comes installed out of the box on most Linux desktops. It has two major versions: Python2 and Python3. You can confirm if these two versions are available on your computer by using the following commands:

# Check python3 installation
python3 --version
# Check python2 installation
python2 --version

To install Python versions other than the preinstalled ones, use the deadsnake PPA (Personal Package Archive) in Ubuntu-based distributions.

If you don’t have PPA enabled on your machine, enable it with this command:

sudo apt-get install software-properties-common

Use this command to add the deadsnake PPA to your apt source:

sudo add-apt-repository ppa:deadsnakes/ppa

Now you can install any Python version you want with the following command. Be sure to replace “3.10” with the relevant version number.

sudo apt update
sudo apt install python3.10

Use the --version flag to check if your new Python version has been installed properly.

python3.10 --version

Remember, if you check your system’s Python version at this point, it still shows the number of the preinstalled version.

Python Version

If you want to use your newly installed version of Python as the default, you can use the update-alternatives command, which helps set the priority for different versions of the same software. Run the following commands to set python3.10 as the Python version with the highest priority.

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

The second command marks python3.8 to your preinstalled Python version.

You can use the following command to switch between different Python versions.

sudo update-alternatives --config python

Manage Python Projects With Virtual Environments

Python is not good at managing dependencies. If you use the default package installer, pip, or pip3 to install Python libraries and packages, it will install the packages globally. As Linux comes with a preinstalled version of Python and uses different packages to run the operating system, manually installed packages in the global scope can disrupt its functioning. This is where a virtual environment comes in handy. It’s an isolated Python environment that has its own tools and libraries independent of the main setup. Think of a virtual environment as an isolated room that has minimal dependencies.

If you don’t use virtual environments, you don’t have any control on the versions of the packages you have used in your project, which is problematic when you try to run your software on a different machine. Therefore, it is advisable to use a virtual environment for your Python projects.

Creating a Virtual Environment With Venv

venv is the recommended way to create a virtual environment in Python and it comes preinstalled. If you have never used venv, you should first install its dependencies on your computer with the following command. Change python3.10 to your installed Python version in the command.

sudo apt update
sudo apt install python3.10-venv

Now create a new virtual environment using the venv package. We named our virtual environment “venv.” You can name it whatever you want.

python3 -m venv venv
# Let's create a virtual environment named mte
python3 -m venv mte
Python Venv

After creating the virtual environment, activate it by sourcing venv environment variables and commands.

source venv/bin/activate

Now you can see a (vnev) prefix in your terminal prompt, which means that your virtual environment is now active and ready for installing dependencies. Let’s install a new dependency called “requests” inside our newly created virtual environment.

python -m pip install requests

To deactivate the virtual environment, run deactivate within it.

Python Venv 2

Creating a Virtual Environment With Virtualenv

virtualenv is the most popular tool to create Python virtual environments. It is a superset of venv, which means that virtualenv can do all the things venv can and more.

You can create different virtual environments with different versions of Python using virtualenv. It also allows you to use different and specific versions of the same package in projects – a feature not available in the venv package.

virtualenv has a command similar to venv for creating a virtual environment.

virtualenv venv

A new virtual environment named “venv” is created from the command above. To activate the virtual environment, source the activate file.

source venv/bin/activate
Python Virtualenv

Now you can see a (venv) prefix in your terminal prompt to indicate that the virtual environment has been activated.

To create a virtual environment with different Python versions, you should use the --python or -p flag and give the location of the Python executable. For example, if you want to create a virtual environment with Python 2.6, a very old Python version, the command should look like this:

virtualenv --python="/usr/bin/python2.6" venv

Creating a Virtual Environment With Miniconda/Anaconda

Conda is a package manager like pip. But unlike pip, Conda supports many other programming languages and takes a different approach to creating virtual environments. Conda is developed independently from pip.

You can use Conda by installing the Miniconda package. If you are into data science and machine learning, you can also install the Anaconda package which includes all the data-science-related packages.

To install Miniconda on your Linux machine, download Miniconda for the relevant Python version and run this shell script in your terminal to set up Miniconda automatically.

./Miniconda3<version name goes here>.sh

After installation, a default Miniconda environment called “base” is created. If you run the conda install command, the newest versions of the packages you request are installed within the environment. If your Conda environment is not activated, activate it using this command.

conda activate base

Conda makes it easy to create environments for different Python versions. All you have to do is specify the correct Python version in the command. Conda will then automatically download, install, and set up all the dependencies for you.

For example, if you want Python version 3.7 in a Conda environment, the command should look like this.

conda create -n "myenv" python=3.7

After creating and activating this environment, you can use it to install your favorite software, such as NumPy:

conda install numpy

Run a Python3 Script With “Python”

It is more intuitive to type python instead of python3 to run a Python script. You can make this switch automatically if you use the “python-is-python3” package in Linux. After installing this package, the python command automatically uses python3 binaries.

The “python-is-python3” package is available in Ubuntu repositories and you can install it using the apt package manager.

sudo apt update
sudo apt install python-is-python3
Python Is Python3

Frequently Asked Questions

Can installing different Python versions break my system?

It’s possible. If your operating system needs some specific features of Python to work properly and they’re deprecated in the Python version installed on your machine, you may experience instability on your machine. In the worst case, your operating system may break and you may have to install it afresh.

Where do virtual environments store Python packages?

Virtual environments store packages in specific hidden directories inside the home folder. Different virtual environments have different storage locations to ensure that they don’t pollute the system-level packages and the scopes and don’t interfere with the working of the operating system.

How to remove a virtual environment?

You can delete your virtual environments very easily. Go to your project directory and find the directory named after your virtual environment. It stores all the configurations of your virtual environments. Delete this directory and you are good to go.

Image credit: Hitesh Choudhary via Unsplash. All screenshots by Hrishikesh Pathak.

Hrishikesh Pathak
Hrishikesh Pathak

Developer and writer. Write about linux and web.

Subscribe to our newsletter!

Our latest tutorials delivered straight to your inbox