beawolf - Fotolia
Ubuntu, Debian and other versions of Linux still ship with Python 2 installed, despite Python 3's decade on the scene.
Python 3 debuted in 2008. Python 2's final version, 2.7, came out in 2010. Python 2 will reach end of life in 2020, five years later than originally planned. Python 2 users argued that they could not, or did not want to, upgrade earlier than this 2020 timeframe.
Developers and system administrators need to use Python and Linux together while these two versions of Python are available. The best path for many IT organizations is to run version 2.x and 3.x at the same time on a system.
Python 2 and 3 are almost the same. The most famous deprecated feature of Python 2 is a requirement to put parentheses () around the print() statement. Because new development is focused on Python 3, users who cling to Python 2 could miss new packages. The scenario is not always either/or. For example, the cloud orchestration system OpenStack, which is written in Python, uses either version. The open source TensorFlow machine learning library is available in both as well.
Linux and Python run into messy situations due to the two versions. To illustrate, the request which python on a new Ubuntu server yields the response:
The Ubuntu server runs Python 2. An admin can install Python 3 in addition and use Python 3. To run a Linux system with Python 3, always include python3 instead of python, or create an alias that points to python3 or a soft link that enables the user simply to type python.
When users install Python packages, they go into two folders, depending on whether they use the package manager pip2 or pip3:
Put the wrong version of Python into the wrong folder on the Linux box, and you can end up with an unrecoverable situation (see Figure 1).
An admin might drill down and try to install the Depends on packages in an attempt to fix the situation, but that can create a further mess (see Figure 2). Admins typically fix broken dependencies via sudo apt-get install -f, but this method is usually ineffective with Python and Linux.
To resolve Python and Linux problems, install the virtualenv Python environment isolation tool. Virtualenv creates multiple Python environments for multiple users. It works by installing Python 2 and Python 3 binaries in the target folder, which is preferably the user's home folder. Then, it installs Python packages in (target folder)/lib. It also can share systemwide packages.
To start working with virtualenv, enter sudo apt-get install virtualenv. Or try other variations on the install process.
sudo apt-get install python3-pip
It installs systemwide. Virtualenv installs another pip3 in the (target folder). Change to the home directory, then create a python2 virtual environment, in this case (target folder):
cd virtualenv (target folder)
Bring up this python2 environment via the commands:
source (target folder)/bin/activate
Check that the Linux system is now running Python in (target folder)/bin/ and not the system Python:
/home/(your id)/(target folder)/bin/python
Set up the python3 virtualenv environment:
virtualenv -p python3 (target folder)
Then, type python3 to run Python 3.
Check that pip3 is installed:
/home/(your id)/(target folder)/bin/pip3
Install a package, and check that it is installed in (target folder)/lib:
pip3 install requests
ls (target folder)/lib/python3.5/site-packages/requests
Switch between Python versions
If a server already has Python 3 but a given task or program requires Python 2, use this command:
virtualenv --python=/usr/bin/python (target directory)
source (target directory)/bin/activate