While Windows uses the Python Launcher (py -0
) to switch between versions, on GNU/Linux, tools like pyenv
offer similar flexibility, although you could even run different versions of Python in virtual environments. Here's how you can manage multiple Python versions on Debian-based servers:
Method 1: Using pyenv
(Recommended)
pyenv
is a tool specifically designed to manage multiple Python versions on Unix-based systems like GNU/Linux. It allows you to easily switch between different versions without breaking nor affecting the system's default Python installation.
Steps to install and use pyenv
:
-
Install dependencies for
pyenv
:sudo apt update sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncurses5-dev libncursesw5-dev xz-utils tk-dev \ libffi-dev liblzma-dev python3-openssl git
-
Install
pyenv
:curl https://pyenv.run | bash
-
Update your shell configuration to include
pyenv
in your PATH. Add the following lines to~/.bashrc
or~/.bash_profile
:export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
-
Restart your shell:
exec $SHELL
-
Install different versions of Python using
pyenv
:pyenv install 3.9.19 pyenv install 3.12.5
-
Set the global or local Python version:
- To set the global default version:
pyenv global 3.12.5
- To set a local version (specific to a directory/project):
pyenv local 3.9.19 # Generates a '.python-version' file
- To set the global default version:
-
Run a specific version of Python:
pyenv shell 3.9.19 # Temporarily use Python 3.9.19
-
Run a script with Python 3.9.19 without changing the global or local version:
pyenv shell 3.9.19 && python your_script.py
-
Show all available versions. Similar to
py -0
on Windows:pyenv versions
Method 2: Manual Installation and Managing with Virtual Environments
Alternatively, you can manually install different Python versions from source and use virtual environments to manage them.
Steps:
-
Download and compile the desired Python version:
wget https://www.python.org/ftp/python/3.9.19/Python-3.9.19.tgz tar -xzf Python-3.9.19.tgz cd Python-3.9.19 ./configure --enable-optimizations make -j $(nproc) sudo make altinstall
-
Create a virtual environment with the specific version:
python3.9 -m venv ~/myenv39 source ~/myenv39/bin/activate
-
To switch between Python versions, activate the relevant virtual environment.
Conclusion
Using pyenv
is the most convenient method as it simplifies managing multiple Python versions, switching between them, and even creating virtual environments tailored to specific versions. Method 2 is really just included for contrast of thought.