Import "izip" for different versions of Python A common idiom that I use for Python2-Python3 compatibility is:

try:
    from itertools import izip
except ImportError:  #python3.x
    izip = zip


However, a comment on one of my Stack Overflow answers implies that there may be a better way.  Is there a more clean way to accomplish this?
Not sure this is really an answer, or I should elaborate on my comment, and in hindsight probably not even a very good comment anyway, but:

Firstly, you can just simplify it to:

try:
    from itertools import izip as zip
except ImportError: # will be 3.x series
    pass


What I was thinking about was:

From 2.6 you can use as per the docs:

from future_builtins import map # or zip or filter


You do however then have the same problem of ImportError - so:

try:
    from future_builtins import zip
except ImportError: # not 2.6+ or is 3.x
    try:
        from itertools import izip as zip # &lt; 2.5 or 3.x
    except ImportError:
        pass


The advantage of using future_builtin is that it's in effect a bit more "explicit" as to intended behaviour of the module, supported by the language syntax, and possibly recognised by tools. For instance, I'm not 100% sure, but believe that the 2to3 tool will re-write zip correctly as list(zip(... in this case, while a plain zip = izip may not be... But that's something that needs looking in to.

Updated - also in the docs:


  The 2to3 tool that ports Python 2 code to Python 3 will recognize this usage and leave the new builtins alone.