Python 3 Compatibility (PyCon 2009)

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Python 3 Compatibility (PyCon 2009) - Presentation Transcript

    1. Python 2.6 and 3.0 Compatibility Lennart Regebro http://regebro.wordpress.com/ regebro@gmail.com PyCon 2009, Chicago
    2. Python 3.0 is here!
    3. Python 3 is incompatible
    4. Python 3 is incompatible O RLY?
    5. Python 3 is incompatible Ya, really! O RLY?
    6. Strategies to deal with incompatibility
    7. For applications: Just port to Python 3
    8. 2to3 helps you port
    9. Tests are really helpful
    10. Libraries need to support both Python 2 and Python 3
    11. For most libraries: Develop in Python 2 and run 2to3 for Python 3 support
    12. 2to3 supported development has a significant startup cost
    13. For stable libraries: Just port to Python 3
    14. Platform Extensions/ Plugins/etc.
    15. No Plone user will switch to Python 3 until important extensions are available
    16. Nobody will make the extensions support Python 3 until they themselves move to Python 3
    17. Dead lock
    18. The Zope experience
    19. Zope 3: A complete break
    20. Zope 3.1 etc: No break
    21. Wanted: Gradual upgrade path
    22. First support 2.5 and 2.6, then support 2.6 and 3.0, finally dropping 2.x completely
    23. Python 3 is incompatible Oh, right, I forgot already.
    24. Python 2.6 introduces quite a lot of forward compatibility!
    25. Python 2.5: except Exception, e: Python 3.0: except Exception as e:
    26. Python 2.6: Both works!
    27. Python 2.5: 3/2 == 1 Python 3.0: 3/2 == 1.5
    28. Solutions: 3//2 == 1 from __future__ import division 3/2 == 1.5
    29. Python2.5: print >> file, “bla”, “bla”, “bla”, Python3.0: print(“bla”, “bla”, “bla”, file=file, ending='')
    30. Python 2.6: from __future__ import print_function
    31. Python2.5: u”Üniçodê” Python3.0: “Üniçodê”
    32. Python 2.6: from __future__ import unicode_literals
    33. from __future__ import unicode_literals try: str = unicode except NameError: pass isinstance(type(“Üniçodê”), str)
    34. Python2.5: open('filename', 'r').read() 'A stringn' open('filename', 'rb').read() 'A stringn'
    35. Python3.0: open('filename', 'r').read() 'A stringn' open('filename', 'rb').read() b'A stringn'
    36. Python 2.6: b“A string”[5] == “i” Python 3.0: b“A string”[5] == 105
    37. Solutions for 2.6 and 3.0: bytearray(b”A list of bytes”) bytearray(open(file, “rb”).read())
    38. Python 2.6: >>> bytes(a_byte_array) 'Binary data' Python 3.0: >>> bytes(a_byte_array) b'Binary data'
    39. Python2.5: open(“unicodefile”).read() 'xc3x9cnixc3xa7odxc3xaan' Python3.0: 'Üniçodên'
    40. Solution for 2.6 and 3.0: infile =open(“unicodefile”, “rb”) uni = infile.read().decode(enc)
    41. try: from cStringIO import StringIO except ImportError: from io import StringIO
    42. Python2.5: dict.items()/dict.keys()/dict.values() return lists Python3.0: dict.items()/dict.keys()/dict.values() return views
    43. Python 2.5: foo = bar.keys() foo.sort() Python 2.4 - 3.0: foo = sorted(bar.keys())
    44. Removed: dict.iteritems() dict.itervalues() dict.iterkeys()
    45. Python 2.6 solution: try: iter = d.iteritems() except AttributeError: iter = d.items()
    46. Aaaahhhhh........ Now meta classes make sense
    47. infile = open('something', 'rb') bdata = infile.read() python2.6: pass python 3.0: sdata = bdata.decode()
    48. Python 2.x and 3.0: sdata = str(bdata.decode('ascii'))
    49. Running on both 2.x and 3.0 will mean some ugly hacks no matter if you use 2to3 or not
    50. Using 2to3: Easy to support 2.3, 2.4, 2.5 Few contortions Some setup cost Single branch of code
    51. Separate branches: Easy to support 2.3, 2.4, 2.5 No contortions No setup cost You have to fix all bugs twice
    52. 2.6 and 3.0 support without 2to3: More contortions Low setup cost Single branch of code But, no support for < 2.6
    53. Supporting Python 2.5 or lower and 3.0 without 2to3: Contortion fest! High hack value Lot's of work
    54. So what if you decide to go for 2.6 and 3.0 without 2.6? 1. 2to3 2. Make it run under 3.0 3. Backport to Python 2.6
    55. 2.6 compatible 2to3?
    56. Preparing yourself for 3.0
    57. Already in 2.6: String exceptions are gone “as” and “with” are keywords
    58. Python 2.3: alist.sort(cmp=func) Python 2.4 and later: alist = sorted(alist, key=func)
    59. Use // when you want integer division. Use from __future__ import division already now
    60. Mark binary files with “rb” or “wb”
    61. http://code.google.com/p/python-incompatibility regebro@gmail.com
    SlideShare Zeitgeist 2009

    + regebroregebro Nominate

    custom

    143 views, 0 favs, 0 embeds more stats

    This talks takes a look at the various options of m more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 143
      • 143 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 7
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories