I have a Python file which might have to support Python versions < 3.x and >= 3.x. Is there a way to introspect the Python runtime to know the version which it is running (for example,
2.6 or 3.2.x)?
For example, to check that you are running Python 3.x, use
import sys if sys.version_info < 3: raise Exception("Must be using Python 3")
sys.version_info is the major version number.
sys.version_info would give you the minor version number.
In Python 2.7 and later, the components of
sys.version_info can also be accessed by name, so the major version number is
Here’s some code I use with
sys.version_info to check the Python installation:
def check_installation(rv): current_version = sys.version_info if current_version == rv and current_version >= rv: pass else: sys.stderr.write( "[%s] - Error: Your Python interpreter must be %d.%d or greater (within major version %d)n" % (sys.argv, rv, rv, rv) ) sys.exit(-1) return 0 ... # Calling the 'check_installation' function checks if Python is >= 2.7 and < 3 required_version = (2,7) check_installation(required_version)
To make the scripts compatible with Python2 and 3 i use :
from sys import version_info if version_info < 3: from __future__ import print_function
Try this code, this should work:
import platform print(platform.python_version())
The best solution depends on how much code is incompatible. If there are a lot of places you need to support Python 2 and 3,
six is the compatibility module.
six.PY3 are two booleans if you want to check the version.
However, a better solution than using a lot of
if statements is to use
six compatibility functions if possible. Hypothetically, if Python 3000 has a new syntax for
next, someone could update
six so your old code would still work.
import six # OK if six.PY2: x = it.next() # Python 2 syntax else: x = next(it) # Python 3 syntax # Better x = six.next(it)
Version check example below.
Note that I do not stop the execution, this snippet just:
– do nothing if exact version matches
– write INFO if revision (last number) is different
– write WARN if any of major+minor are different
import sys import warnings def checkVersion(): # Checking Python version: expect_major = 2 expect_minor = 7 expect_rev = 14 if sys.version_info[:3] != (expect_major, expect_minor, expect_rev): print("INFO: Script developed and tested with Python " + str(expect_major) + "." + str(expect_minor) + "." + str(expect_rev)) current_version = str(sys.version_info)+"."+str(sys.version_info)+"."+str(sys.version_info) if sys.version_info[:2] != (expect_major, expect_minor): warnings.warn("Current Python version was unexpected: Python " + current_version) else: print(" Current version is different: Python " + current_version)
Since all you are interested in is whether you have Python 2 or 3, a bit hackish but definitely the simplest and 100% working way of doing that would be as follows:
python_version_major = 3/2*2
The only drawback of this is that when there is Python 4, it will probably still give you 3.
Just in case you want to see all of the gory details in human readable form, you can use:
import platform; print(platform.sys.version);
Output for my system:
3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0]
Something very detailed but machine parsable would be to get the
version_info object from
platform.sys, instead, and then use its properties to take a predetermined course of action. For example:
import platform; print(platform.sys.version_info)
Output on my system:
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)