How can I find out what versions of Python I have?
I am using Ubuntu 14.04 (Trusty Tahr).
28 Answers
You can use python -V (et al.) to show you the version of Python that the python command resolves to. If that's all you need, you're done. But to see every version of python in your system takes a bit more.
In Ubuntu we can check the resolution with readlink -f $(which python). In default cases in 14.04 this will simply point to /usr/bin/python2.7.
We can chain this in to show the version of that version of Python:
$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V' /usr/bin/python2.7: Python 2.7.6 But this is still only telling us what our current python resolution is. If we were in a Virtualenv (a common Python stack management system) python might resolve to a different version:
$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V' /home/oli/venv/bin/python: Python 2.7.4 This is real output.
The fact is there could be hundreds of different versions of Python secreted around your system, either on paths that are contextually added, or living under different binary names (like python3).
If we assume that a Python binary is always going to be called python<something> and be a binary file, we can just search the entire system for files that match those criteria:
$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; | awk -F: '/x-executable; charset=binary/ {print $1}' | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V' /home/oli/venv/bin/python: Python 2.7.4 /media/ned/websites/venvold/bin/python: Python 2.7.4 /srv/chroot/precise_i386/usr/bin/python2.7: Python 2.7.3 /srv/chroot/trusty_i386/usr/bin/python2.7: Python 2.7.6 /srv/chroot/trusty_i386/usr/bin/python3.4: Python 3.4.0 /srv/chroot/trusty_i386/usr/bin/python3.4m: Python 3.4.0 /usr/bin/python2.7: Python 2.7.6 /usr/bin/python2.7-dbg: Python 2.7.6 /usr/bin/python3.4: Python 3.4.0 /usr/bin/python3.4dm: Python 3.4.0 /usr/bin/python3.4m: Python 3.4.0 /web/venvold/bin/python: Python 2.7.4 It's obviously a pretty hideous command but this is again real output and it seems to have done a fairly thorough job.
5Type following in the terminal (Ctrl+Alt+T):
python -V or
python --version You can find a list of options/parameters for many commands in the terminal by typing the command followed by --help
Example:
python --help Manual/manpages also available for most of such CLI which can be displayed by man <command> (Ex: man python)
From man python:
COMMAND LINE OPTIONS -V , --version Prints the Python version number of the executable and exits. There is also python3 installed on many machines, so you can do:
python3 --version to find out what python 3.x you are running.
1python --version and
python2 --version show the version of Python 2.x,
python3 --version the installed version of Python 3.x
If you want to see all versions of Python available as commands, run compgen -c python. E.g:
$ compgen -c python | sort -u python python2 python2.7 python3 python3.4 python3.4m python3m If you want to get the version of each of the above:
compgen -c python | sort -u | grep -v -- '-config$' | while read -r p; do printf "%-14s " "$p" "$p" --version done python Python 2.7.6 python2 Python 2.7.6 python2.7 Python 2.7.6 python3 Python 3.4.3 python3.4 Python 3.4.3 python3.4m Python 3.4.3 python3m Python 3.4.3 Notes:
This ignores aliases. For example if I had
alias python=python3, the above would still show 2.7 forpython.I'm filtering out the
python*-configprograms withgrep -vsince they don't support the--versionflag. For example:$ python3-config --version Usage: /usr/bin/python3-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir
When you run python in the terminal, it will produce output like this:
Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> See the first line - Python 2.7.6.
Also run python3. I have 3.4.1
Python 3.4.1 (default, Jul 31 2014, 12:46:17) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> However, this won't show you them all. If you have 2 or more python 3.X.x versions, you will only see the latest one.
By default on 14.04, you have 2.7.6 and 3.4.0. As you can see, I have updated to 3.4.1. I know that I still have 3.4.0 because when I go to /usr/bin I see python3.4, and if I run /usr/bin/python3.4 in the command line, I get 3.4.0, and running /usr/local/bin/python3.4 gives me 3.4.1
My pronouns are He / Him
4You can also check Python version from code itself using platform module from standard library. There are two functions: platform.python_version() (returns string) and platform.python_version_tuple() (returns tuple). Script:
import platform print(platform.python_version()) print(platform.python_version_tuple()) Running:
$ python test.py 3.4.1 ('3', '4', '1') $ python2.7 test.py 2.7.8 ('2', '7', '8') 1Easily, open the terminal and do the following:
Write
python to verify your 2.x version In my case, it will appear:
Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. For the 3.x, write:
python3 In my case, it appears:
Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. For both cases, to get out from Python shell, write:
exit() 0In shell terminal
$ which -a pythonlists all yourpython.$ which -a python2.7lists all yourpython2.7.$ /usr/bin/python -Vgives information about the version of/usr/bin/python.check in python script
here is an ilustration in ipython shell:
In [1]: import sys In [2]: sys.version 2.7.11 |Anaconda 2.5.0 (64-bit)| (default, Dec 6 2015, 18:08:32) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] In [3]: sys.version_info sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0) In [4]: sys.version_info >= (2,7) Out[4]: True In [5]: sys.version_info >= (3,) Out[5]: False 2