44

I type python in a terminal window. I get Python 2.7 and not Python 3.5. According to the docs, Python 3.5 should come preloaded.

Braiam
  • 69,112
givonz
  • 611

5 Answers5

58

I don't know what "docs" you are reading nor what they say, but the /usr/bin/python is just a symbolic link to the default version of python, in this case 2.7, which is the result of just typing python on the terminal. This is the result of PEP 394 which defines that

  • for the time being, all distributions should ensure that python refers to the same target as python2.

type python and file /usr/bin/python will confirm this.

The reason for this arrangement other than the convention, is that the source package python-defaults in Xenial is the version 2.7.11, so the python symbolic link points to this version.

To use python 3 you have to be explicit and type python3 in the command line, which is recommended in case you need an specific version, this can also be done with python 2, typing python2. Ubuntu includes both python 2 and 3 versions by default on all current versions.

There are plans to migrate everything to python 3 and marking it as the default.

Braiam
  • 69,112
10

To get the Python 3.5 REPL or run a script that's compatible, type python3. This is to maintain compatibility with all the legacy python 2.x (which has always been, and will remain linked to python).

The dash could find python if you set up a .desktop file for it (in ~/.local/share/applications/), to open a terminal and start the REPL for instance. There isn't a default GUI REPL environment for python, and normal interface expectations are that the user would go to the terminal.

The talk of python 3.5 being default is the maintainers porting all system scripts from python 2.x over to python 3.x, not that python 3 would replace python 2 in all cases.

7

You assume that the default Python should be available as python. That assumption is wrong.

It is an unlucky situation that obsolete Python 2 (python) comes first during shell Tab-expansion, before current and default Python 3 (python3) on systems which have both. The naming itself certainly does not help finding the default either, but there is a reason behind that.

On a system that comes with Python 3 “preloaded” and no Python 2 at all, there will be only python3 and no python.

Code written for Python 3 should always look for an interpreter called python3. Code written for Python 2 will historically look for python.

This way, there will be no extra and unnecessary breakage, neither for new nor old scripts from any uncertainty of what python might point to.

There might come a point in time, possibly decades from now, where almost no-one remembers Python 2, when python might start to refer to python3. This would be purely for convenience, and can and should not be done premature, if at all! There is no hurry, because of the following impact:

“Current old” systems will have no knowledge of python2, only python, so it makes perfect sense to keep Python 2 code looking for python. This is the reason why python should refer to Python 2 for “as long as Python 2 code exists”.

New code written for Python 2, if that makes sense, can perfectly look for python. It might also look for python2, if it is intended to run only on Python 3 aware and well groomed systems (which might offer such link).

The benefit of Python 2 code using python2 would be that it needs no extra touching once python starts referring to python3, which might never happen, or once python disappears at all, which might or might not happen. (That might come true, if Python 2 code dies out after hypothetical Python 4 becomes popular with its interpreter python4. – Because letting it point to either python3 or python4 would both be confusing.)

Note: The Arch Linux distribution did not follow the recommendation and lets python point to Python 3.

2

Python both 2.x, 3.x versions are available. if you call python as it is pointed to python 2.x it will load python 2.x

Below image will help you.

enter image description here

Raja G
  • 105,327
  • 107
  • 262
  • 331
2

Python 3.x should work with 16.04 - Actually, it definitely WILL work. I have Ubuntu 14.04 and I have Python 3.4.3 - All you have to do to test it is type in python3 and it should tell you what version you're running.

grooveplex
  • 2,506
  • 3
  • 27
  • 35
Danny
  • 58