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.
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
pythonrefers to the same target as
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.
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
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.
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
Code written for Python 3 should always look for an interpreter called
python3. Code written for Python 2 will historically look for
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
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
python4 would both be confusing.)
Note: The Arch Linux distribution did not follow the recommendation and lets
python point to Python 3.