How to Install Multiple Python Versions on Ubuntu

Managing multiple Python versions on Ubuntu can seem daunting, but it’s actually quite straightforward once you know the right methods. Whether you’re working on different projects that require specific Python versions, testing compatibility across versions, or simply want to keep your system Python separate from development work, this comprehensive guide will walk you through every step.

In this detailed tutorial, you’ll discover four proven methods to install and manage multiple Python versions on Ubuntu, along with practical tips for switching between them seamlessly. Let’s dive right in!

Why You Need Multiple Python Versions

Before we jump into the installation process, let’s understand why you might need multiple Python versions on your Ubuntu system. According to recent developer surveys, over 68% of Python developers work with at least two different Python versions simultaneously.

Here are the most common scenarios:

  • Legacy project support: Maintaining older applications that require Python 2.7 or earlier Python 3 versions
  • Testing compatibility: Ensuring your code works across different Python releases
  • Framework requirements: Some frameworks or libraries only work with specific Python versions
  • System isolation: Keeping your system Python untouched while using newer versions for development

The beauty of Ubuntu is that it allows you to install multiple Python versions side by side without conflicts, as long as you follow the right approach.

Prerequisites and System Requirements

Before installing multiple Python versions, you’ll need to ensure your system meets the basic requirements and is properly prepared.

Checking Your Current Python Installation

Most Ubuntu systems come with Python pre-installed. Let’s check what you currently have:

python3 --version

This command will show your current Python version. Ubuntu 22.04 typically comes with Python 3.10, while Ubuntu 20.04 ships with Python 3.8.

You can also check for any existing Python installations:

ls /usr/bin/python*

This will list all Python executables in your system’s binary directory.

System Updates and Dependencies

It’s crucial to update your system before installing new Python versions. This ensures you have the latest security patches and dependency compatibility:

sudo apt update -y && sudo apt upgrade -y

You’ll also need some essential build tools if you plan to compile Python from source:

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

Method 1: Using APT Repository (Simplest Approach)

The easiest way to install additional Python versions is through Ubuntu’s official repositories. This method is perfect for beginners and covers the most commonly used Python versions.

Installing Python from Default Repository

Ubuntu’s default repositories contain several Python versions that you can install directly using the apt package manager.

Installing Python 3.10

If you’re on Ubuntu 20.04 and want Python 3.10, you can install it directly:

sudo apt install python3.10 -y

To verify the installation:

python3.10 -V

You should see output like: Python 3.10.6

Installing Python 3.8

For Python 3.8 installation:

sudo apt install python3.8 -y

Verify with:

python3.8 -V

Expected output: Python 3.8.16

Installing Python 3.9

Python 3.9 is also available in the default repositories:

sudo apt install python3.9 -y

The advantage of this method is its simplicity and stability. However, you’re limited to the versions available in Ubuntu’s repositories, which might not include the latest releases.

Method 2: Using Deadsnakes PPA (Most Popular)

The Deadsnakes PPA (Personal Package Archive) is the most popular method for installing multiple Python versions on Ubuntu. It provides access to a wider range of Python versions that aren’t available in the default repositories.

Adding Deadsnakes Repository

First, add the Deadsnakes PPA to your system:

sudo add-apt-repository ppa:deadsnakes/ppa

You’ll see a prompt explaining the repository. Press Enter to continue, then update your package list:

sudo apt update

Installing Multiple Versions via Deadsnakes

Now you can install virtually any Python version. Let’s check what’s available:

apt-cache search python3. | grep -E "python3\.[0-9]+"

This will show you all available Python versions.

Available Python Versions

Through Deadsnakes, you can typically install:

  • Python 3.6 through Python 3.12
  • Some development versions
  • Specific point releases

For example, to install Python 3.11:

sudo apt install python3.11 -y

The Deadsnakes method is particularly valuable because it maintains compatibility with Ubuntu’s package management system while providing access to newer Python versions.

Method 3: Using PyEnv (Advanced Management)

PyEnv is a powerful tool that allows you to install and manage multiple Python versions with ease. It’s particularly popular among developers who need to switch between versions frequently.

Installing PyEnv Dependencies

Before installing PyEnv, you need several dependencies:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Installing PyEnv

Install PyEnv using the official installer:

curl https://pyenv.run | bash

Setting Up Environment Variables

Add PyEnv to your shell configuration:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

Restart your shell:

source ~/.bashrc

Installing Python Versions with PyEnv

Now you can install any Python version:

pyenv install 3.9.16
pyenv install 3.10.11
pyenv install 3.11.3

List installed versions:

pyenv versions

Set a global Python version:

pyenv global 3.11.3

The major advantage of PyEnv is its ability to manage versions per project using .python-version files.

Method 4: Compiling from Source (Manual Installation)

For the ultimate control over your Python installation, you can compile from source. This method is more complex but allows you to customize the build process.

Downloading Python Source Code

Navigate to the /opt directory and download the source:

cd /opt
sudo wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz
sudo tar xfv Python-3.6.15.tgz
cd Python-3.6.15/

Compiling and Installing

Configure and compile the source:

sudo ./configure --enable-optimizations
sudo make altinstall

Note: Use make altinstall instead of make install to avoid overwriting your system Python.

Managing Multiple Python Versions

Once you have multiple Python versions installed, you need effective ways to manage and switch between them.

Using Update-Alternatives

The update-alternatives system is Ubuntu’s native way to manage multiple versions of the same program.

Setting Up Alternative Configurations

First, add your Python versions to the alternatives system:

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

The numbers at the end represent priorities – higher numbers have higher priority.

Switching Between Versions

To switch between versions:

sudo update-alternatives --config python3

You’ll see a menu like this:

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

Enter the number corresponding to your desired version.

Creating Symbolic Links

Alternatively, you can create custom symbolic links for easy access:

sudo ln -s /usr/bin/python3.10 /usr/local/bin/python310
sudo ln -s /usr/bin/python3.8 /usr/local/bin/python38

Now you can call specific versions directly:

python310 --version
python38 --version

Working with Virtual Environments

Virtual environments are crucial when working with multiple Python versions, as they allow you to isolate project dependencies.

Creating Project-Specific Environments

With your multiple Python versions installed, you can create virtual environments for each project:

python3.10 -m venv myproject_env
source myproject_env/bin/activate

For PyEnv users, you can create project-specific environments easily:

cd myproject
pyenv local 3.9.16
pyenv virtualenv 3.9.16 myproject
pyenv local myproject

Managing Dependencies

Each virtual environment maintains its own set of packages, preventing conflicts between projects with different requirements. Always install packages within activated virtual environments:

pip install -r requirements.txt

Troubleshooting Common Issues

Managing multiple Python versions can sometimes lead to complications. Here are the most common issues and their solutions.

Permission Problems

If you encounter permission errors, ensure you’re using sudo for system-wide installations or consider using user-local installations:

python3.10 -m pip install --user package_name

Dependency Conflicts

When packages conflict between versions, virtual environments are your best friend. They provide complete isolation between different Python environments.

Fixing Broken Installations

If an installation becomes corrupted, you can usually fix it by reinstalling:

sudo apt install --reinstall python3.10

For PyEnv installations:

pyenv uninstall 3.10.11
pyenv install 3.10.11

Best Practices and Recommendations

Based on extensive experience managing Python environments, here are the key best practices:

  1. Never modify system Python: Always keep your system Python installation untouched to avoid breaking system tools
  2. Use virtual environments: Always work within virtual environments for projects
  3. Document your setup: Keep track of which Python versions your projects require
  4. Regular updates: Keep your Python installations updated for security patches
  5. Choose one method: Stick to one installation method (PyEnv, Deadsnakes, etc.) to avoid conflicts

For most developers, I recommend starting with the Deadsnakes PPA method, as it provides a good balance between simplicity and functionality.

Performance Considerations

Different installation methods can have varying performance implications:

  • APT installations are typically the fastest and most optimized
  • PyEnv installations may have slightly different performance characteristics due to compilation options
  • Source compilations allow you to optimize for your specific hardware using --enable-optimizations

In practice, these differences are usually negligible for most applications.

Frequently Asked Questions

Q1: Can I have both Python 2 and Python 3 installed simultaneously on Ubuntu?

Yes, absolutely! Ubuntu systems often come with both Python 2 and Python 3 pre-installed. You can install additional versions using any of the methods described in this guide. Just remember to use python2 and python3 commands to specify which version you want to use, and always use virtual environments to avoid package conflicts.

Q2: Which method is best for installing multiple Python versions on Ubuntu?

For most users, the Deadsnakes PPA method offers the best balance of simplicity and functionality. It provides access to a wide range of Python versions while maintaining compatibility with Ubuntu’s package management system. PyEnv is excellent for advanced users who need frequent version switching, while APT repositories are perfect for beginners who only need basic version management.

Q3: Will installing multiple Python versions slow down my system?

No, having multiple Python versions installed won’t significantly impact your system performance. Python installations are relatively small (typically 50-100MB each), and they don’t run in the background. The only time you’ll use system resources is when you’re actually running Python programs, and even then, only the specific version you’re using will be active.

Q4: How do I uninstall a Python version I no longer need?

The uninstallation method depends on how you installed Python. For APT installations, use sudo apt remove python3.x. For Deadsnakes PPA installations, use the same command. For PyEnv installations, use pyenv uninstall version_number. For source installations, you’ll need to manually remove the files from the installation directory (typically /usr/local/bin and /usr/local/lib).

Q5: Can I use different Python versions for different projects automatically?

Yes! This is one of the major advantages of tools like PyEnv. You can set project-specific Python versions by creating a .python-version file in your project directory. When you navigate to that directory, PyEnv automatically switches to the specified Python version. You can also use virtual environments with specific Python versions to achieve similar results with other installation methods.

Marshall Anthony is a professional Linux DevOps writer with a passion for technology and innovation. With over 8 years of experience in the industry, he has become a go-to expert for anyone looking to learn more about Linux.

Related Posts