Multiple Python versions on the same machine?
Is there official documentation on the Python website somewhere, on how to install and run multiple versions of Python on the same machine on Linux?
I can find gazillions of blog posts and answers, but I want to know if there is a "standard" official way of doing this?
Or is this all dependent on OS?
Solution 1:
I think it is totally independent. Just install them, then you have the commands e.g. /usr/bin/python2.5
and /usr/bin/python2.6
. Link /usr/bin/python
to the one you want to use as default.
All the libraries are in separate folders (named after the version) anyway.
If you want to compile the versions manually, this is from the readme file of the Python source code:
Installing multiple versions
On Unix and Mac systems if you intend to install multiple versions of Python using the same installation prefix (--prefix argument to the configure script) you must take care that your primary python executable is not overwritten by the installation of a different version. All files and directories installed using "make altinstall" contain the major and minor version and can thus live side-by-side. "make install" also creates ${prefix}/bin/python3 which refers to ${prefix}/bin/pythonX.Y. If you intend to install multiple versions using the same prefix you must decide which version (if any) is your "primary" version. Install that version using "make install". Install all other versions using "make altinstall".
For example, if you want to install Python 2.5, 2.6 and 3.0 with 2.6 being the primary version, you would execute "make install" in your 2.6 build directory and "make altinstall" in the others.
Solution 2:
On Windows they get installed to separate folders, "C:\python26" and "C:\python31", but the executables have the same "python.exe" name.
I created another "C:\python" folder that contains "python.bat" and "python3.bat" that serve as wrappers to "python26" and "python31" respectively, and added "C:\python" to the PATH
environment variable.
This allows me to type python
or python3
in my .bat Python wrappers to start the one I desire.
On Linux, you can use the #!
trick to specify which version you want a script to use.
Solution 3:
Update 2019: Using asdf
These days I suggest using asdf to install various versions of Python interpreters next to each other.
Note1: asdf
works not only for Python but for all major languages.
Note2: asdf
works fine in combination with popular package-managers such as pipenv and poetry.
If you have asdf installed you can easily download/install new Python interpreters:
# Install Python plugin for asdf:
asdf plugin-add python
# List all available Python interpreters:
asdf list-all python
# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...
# If you want to define the global version:
asdf global python 3.7.4
# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4
Old Answer: Install Python from source
If you need to install multiple versions of Python (next to the main one) on Ubuntu / Mint: (should work similar on other Unixs'.)
1) Install Required Packages for source compilation
$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
2) Download and extract desired Python version
Download Python Source for Linux as tarball and move it to /usr/src
.
Extract the downloaded package in place. (replace the 'x's with your downloaded version)
$ sudo tar xzf Python-x.x.x.tgz
3) Compile and Install Python Source
$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall
Your new Python bin is now located in /usr/local/bin
. You can test the new version:
$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X
# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)
Solution 4:
I'm using Mac & the best way that worked for me is using pyenv!
The commands below are for Mac but pretty similar to Linux (see the links below)
#Install pyenv
brew update
brew install pyenv
Let's say you have python 3.6 as your primary version on your mac:
python --version
Output:
Python <your current version>
Now Install python 3.7, first list all
pyenv install -l
Let's take 3.7.3:
pyenv install 3.7.3
Make sure to run this in the Terminal (add it to ~/.bashrc or ~/.zshrc):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
Now let's run it only on the opened terminal/shell:
pyenv shell 3.7.3
Now run
python --version
Output:
Python 3.7.3
And not less important unset it in the opened shell/iTerm:
pyenv shell --unset
You can run it globally or locally as well
Solution 5:
How to install different Python versions is indeed OS dependent.
However, if you're on linux, you can use a tool like pythonbrew or pythonz to help you easily manage and switch between different versions.