State of Python
     January, 2010

     Richard Jones

  richard@python.org
Some History
Some History
•   Development started December, 1989
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991

•   1.5.2 released April, 1999
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991

•   1.5.2 released April, 1999

•   2.0 released October, 2000
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991

•   1.5.2 released April, 1999

•   2.0 released October, 2000

•   py3k branched & PEP 3000 March, 2006
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991

•   1.5.2 released April, 1999

•   2.0 released October, 2000

•   py3k branched & PEP 3000 March, 2006

•   3.0 released November 25, 2008
Some History
•   Development started December, 1989

•   0.9.0 released February, 1991

•   1.5.2 released April, 1999

•   2.0 released October, 2000

•   py3k branched & PEP 3000 March, 2006

•   3.0 released November 25, 2008

•   3.1 released June 27th, 2009
What’s New In 3.1
What’s New In 3.13.0
What We Utterly
Broke In 3.0 With No
   Regard For The
   Consequences
What’s New In 3.0
What’s New In 3.0

• print() and exec() are still functions
What’s New In 3.0

• print() and exec() are still functions
• dict.keys(), dict.items(), dict.values(), map(),
  filter() and zip() still return iterators
What’s New In 3.0

• print() and exec() are still functions
• dict.keys(), dict.items(), dict.values(), map(),
  filter() and zip() still return iterators
• text is still unicode and files still read bytes
What’s New In 3.0

• print() and exec() are still functions
• dict.keys(), dict.items(), dict.values(), map(),
  filter() and zip() still return iterators
• text is still unicode and files still read bytes
• as, with, True, False and None are still keywords
What’s New In 3.0
What’s New In 3.0


• exception chaining is still there
What’s New In 3.0


• exception chaining is still there
• the standard library is still better-organised
What’s New In 3.0
What’s New In 3.0

• old-style classes are still gone
What’s New In 3.0

• old-style classes are still gone
• cmp(), reduce(), apply(), coerce(), callable() and
  raw_input() are still the way of the dodo
What’s New In 3.0

• old-style classes are still gone
• cmp(), reduce(), apply(), coerce(), callable() and
  raw_input() are still the way of the dodo
• `` and <> are also still gone
What’s New In 3.0

• old-style classes are still gone
• cmp(), reduce(), apply(), coerce(), callable() and
  raw_input() are still the way of the dodo
• `` and <> are also still gone
• string exceptions are still no more
What’s New In 3.0 / 2.6
What’s New In 3.0 / 2.6

• multiprocessing
What’s New In 3.0 / 2.6

• multiprocessing
• io and json
What’s New In 3.0 / 2.6

• multiprocessing
• io and json
• tkinter.ttk
  (new complementary widgets, styling
  through “style sheets”)
What’s New In 3.0 / 2.6
What’s New In 3.0 / 2.6
• advanced string formatting
What’s New In 3.0 / 2.6
• advanced string formatting
• Abstract Base Classes
  (and function annotation in 3.0)
What’s New In 3.0 / 2.6
• advanced string formatting
• Abstract Base Classes
  (and function annotation in 3.0)

• 0o21 == 17
  0b1101 == 13
What’s New In 3.0 / 2.6
• advanced string formatting
• Abstract Base Classes
  (and function annotation in 3.0)

• 0o21 == 17
  0b1101 == 13

• Class decorators
What’s New In 3.0 / 2.6
What’s New In 3.0 / 2.6

• added numbers, fractions, cmath, ssl
  modules
What’s New In 3.0 / 2.6

• added numbers, fractions, cmath, ssl
  modules
• new toys in math, functools, itertools,
  collections
What’s New In 3.1
What’s New In 3.1
• python can execute packages (and zip files)
What’s New In 3.1
• python can execute packages (and zip files)
• unittest supports skipping tests
What’s New In 3.1
• python can execute packages (and zip files)
• unittest supports skipping tests
• sys.version_info is a named tuple
  >>> sys.version_info
  sys.version_info(major=3, minor=1, micro=1, releaselevel='final',
  serial=0)
What’s New In 3.1
• python can execute packages (and zip files)
• unittest supports skipping tests
• sys.version_info is a named tuple
  >>> sys.version_info
  sys.version_info(major=3, minor=1, micro=1, releaselevel='final',
  serial=0)


• improved Python 2 pickle support
What’s New In 3.1 / 2.7
What’s New In 3.1 / 2.7
• thanks David Gay:
  >>> 1.1
  1.1000000000000001

  becomes...
  >>> 1.1
  1.1
What’s New In 3.1 / 2.7
• thanks David Gay:
  >>> 1.1
  1.1000000000000001

  becomes...
  >>> 1.1
  1.1


• still doesn’t make this correct:
   1.1 + 2.2 = 3.3
What’s New In 3.1 / 2.7
What’s New In 3.1 / 2.7

• io & json rewritten in C
What’s New In 3.1 / 2.7

• io & json rewritten in C
• memoryview object (mutable byte array)
What’s New In 3.1 / 2.7

• io & json rewritten in C
• memoryview object (mutable byte array)
• ordered dictionary
LESS BUGS
What’s New In 3.1


 STILL B0RKS UR CODEZ!
Books

• Python 3 for Absolute Beginners
  by Tim Hall and J-P Stacey



• Programming in Python 3 (Second Edition)
  by Mark Summerfield
Books

• Dive Into Python 3
  by Mark Pilgrim


  Python 3 Patterns, Recipes and Idioms
  by Bruce Eckel and Friends
Books


• Invent Your Own Computer Games with
  Python (Second Edition)
  by Albert Sweigart
Other Books in 2009


• IronPython in Action
  by Michael Foord
Other Books in 2009
• Head First Programming
  by Paul Barry and David Griffiths



• Python for Software Design: How to Think
  Like a Computer Scientist
  by Allen B. Downey
Other Books in 2009
• Gray Hat Python: Python Programming for
  Hackers and Reverse Engineers
  by Justin Seitz


• Hello World! Computer Programming for
  Kids and Other Beginners
  by Warren Sande and Carter Sande
Python 2.7
Python 2.7

• expected in June - alpha 2 out now
Python 2.7

• expected in June - alpha 2 out now
• includes backporting from 3.1
Python 2.7

• expected in June - alpha 2 out now
• includes backporting from 3.1
• will be the last 2.x release
IronPython
IronPython

• Runs on the .NET CLR
IronPython

• Runs on the .NET CLR
• 2.6 released December 2009
IronPython

• Runs on the .NET CLR
• 2.6 released December 2009
• Visual Studio integration higher priority
  than IronPython 3
Jython
Jython

• Python compiled to the Java VM
Jython

• Python compiled to the Java VM
• 2.5.1 released September 2009
Jython

• Python compiled to the Java VM
• 2.5.1 released September 2009
• target CPython 2.7 for next major release
PyPy


• Python in Python
• Michael Hudson will talk about that
Migration Progress
Migration Progress
• SQLAlchemy (so db layers too)
Migration Progress
• SQLAlchemy (so db layers too)
• Distribute (was “setuptools”)
Migration Progress
• SQLAlchemy (so db layers too)
• Distribute (was “setuptools”)
• pygame reloaded (pgreloaded)
Migration Progress
• SQLAlchemy (so db layers too)
• Distribute (was “setuptools”)
• pygame reloaded (pgreloaded)
• Django (mostly done)
Migration Progress
• SQLAlchemy (so db layers too)
• Distribute (was “setuptools”)
• pygame reloaded (pgreloaded)
• Django (mostly done)
• numpy has a plan
   http://www.scipy.org/Python3k
Migration Progress
Migration Progress
• http://wiki.python.org/moin/PortingPythonToPy3k
Migration Progress
• http://wiki.python.org/moin/PortingPythonToPy3k
• python-porting mailing list
  http://mail.python.org/mailman/listinfo/python-porting
Migration Progress
• http://wiki.python.org/moin/PortingPythonToPy3k
• python-porting mailing list
  http://mail.python.org/mailman/listinfo/python-porting
• a bunch of very useful reference code
  http://code.google.com/p/python-incompatibility/
2to3c


• an implementation of Python's 2to3 for C
  code
3to2


• GSoC project
• http://bitbucket.org/amentajo/lib3to2/
Language Moratorium

Temporary suspension of all changes to
 the Python language syntax, semantics,
and built-ins for a period of at least two
  years from the release of Python 3.1
Python 3 speedup
Python 3 speedup
Python 3 speedup


• Unladen Swallow to be merged into py3k
  (Google’s efforts to speed up Python)
Python 3 speedup


• Unladen Swallow to be merged into py3k
  (Google’s efforts to speed up Python)
• A more rational GIL
Community
Community

• Kiwi PyCon (woot)
Community

• Kiwi PyCon (woot)
• planet.python.org
Community

• Kiwi PyCon (woot)
• planet.python.org
• www.python-forum.org/pythonforum
Community

• Kiwi PyCon (woot)
• planet.python.org
• www.python-forum.org/pythonforum
• PyPI comments
http://au.pycon.org/
Skulpt
Skulpt

• http://www.skulpt.org/
Skulpt

• http://www.skulpt.org/
• entirely in-browser implementation of
  Python
Skulpt

• http://www.skulpt.org/
• entirely in-browser implementation of
  Python
• No preprocessing, plugins, or server-side
  support required
Shed Skin 0.3
• Python-to-C++ compiler
• improved type inference
• support for 'map', 'filter', 'reduce', the 'with'
  statement
• many more library modules supported
• several important optimizations
tinypy


• cython, pyrex
• tinpy → C++ → XCode → iPhone
Distribute & pip


• replaces setuptools and easy_install
• Distribute compatible with python 3
  ... pip soon
Web Stuff
Web Stuff
• Django 1.2 on the way (alpha Jan 2010)
  (full Python 3 support in a year or so)
Web Stuff
• Django 1.2 on the way (alpha Jan 2010)
  (full Python 3 support in a year or so)
• TurboGears 2.1 coming (2.0 was June 2009)
Web Stuff
• Django 1.2 on the way (alpha Jan 2010)
  (full Python 3 support in a year or so)
• TurboGears 2.1 coming (2.0 was June 2009)
• CherryPy 3.1.2 in April 2009
  3.2 due out soon supports Python 3
Web Stuff
• Django 1.2 on the way (alpha Jan 2010)
  (full Python 3 support in a year or so)
• TurboGears 2.1 coming (2.0 was June 2009)
• CherryPy 3.1.2 in April 2009
  3.2 due out soon supports Python 3
• Pylons 0.9.7 in February 2009
  Python 3 support (Pylons 1.1) mid-2010?
Web Stuff

• 6th Plone Conf 2009
• 2nd DjangoCon 2009
• Django Ski 2010
virtualenv
virtualenv

• stand-alone python environments
virtualenv

• stand-alone python environments
• with or without system extensions
virtualenv

• stand-alone python environments
• with or without system extensions
• use it!

State of Python (2010)

Editor's Notes

  • #3 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #4 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #5 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #6 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #7 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #8 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #9 so a good place to start is &amp;#x201C;what&amp;#x2019;s new in 3.1&amp;#x201D;
  • #10 an even better place is to maybe recap what 3.0 gave us
  • #11 or, as some sections of the media and Slashdot reported ...
  • #12 I think we can all remember where we were on that fateful day when Google just stopped working when 3.0 was released. Oh, those were the days.
  • #17 urllib/urllib2 -&gt; urllib (package); httplib/cookielib/BaseHTTPServer(etc) -&gt; http.client, http.server; anydbm/dbhash/gdbm/etc -&gt; dbm; xmlrpclib/SimpleXMLRPCServer -&gt; xmlrpc; also PEP 8 changes (ConfigParser -&gt; configparser)
  • #18 urllib/urllib2 -&gt; urllib (package); httplib/cookielib/BaseHTTPServer(etc) -&gt; http.client, http.server; anydbm/dbhash/gdbm/etc -&gt; dbm; xmlrpclib/SimpleXMLRPCServer -&gt; xmlrpc; also PEP 8 changes (ConfigParser -&gt; configparser)
  • #23 also in 2.6 (note &amp;#x201C;T&amp;#x201D;kinter)
  • #24 also in 2.6 (note &amp;#x201C;T&amp;#x201D;kinter)
  • #25 also in 2.6 (note &amp;#x201C;T&amp;#x201D;kinter)
  • #27 you can get a bunch of the 3.0 features in 2.6 using __future__ (eg. unicode literals)
  • #28 you can get a bunch of the 3.0 features in 2.6 using __future__ (eg. unicode literals)
  • #29 you can get a bunch of the 3.0 features in 2.6 using __future__ (eg. unicode literals)
  • #30 you can get a bunch of the 3.0 features in 2.6 using __future__ (eg. unicode literals)
  • #31 math: inf, -inf, nan, factorial, inverse hyperbolic functions and a bunch of others functools: reduce() itertools: cartesian product of iterables, combinations, permutations collections: namedtuple, deque enhancements, ABCs for Iterable and Mappings
  • #32 math: inf, -inf, nan, factorial, inverse hyperbolic functions and a bunch of others functools: reduce() itertools: cartesian product of iterables, combinations, permutations collections: namedtuple, deque enhancements, ABCs for Iterable and Mappings
  • #49 hackers, reverse engineers debuggers, torjans, fuzzers, emulators, code/library injection, sniffing, ...
  • #50 warning with the code download
  • #51 (2 enters maintenance mode) To reassure people on this, 2.5.5 has just been released.
  • #52 (2 enters maintenance mode) To reassure people on this, 2.5.5 has just been released.
  • #53 (2 enters maintenance mode) To reassure people on this, 2.5.5 has just been released.
  • #57 - 2.5 already supports some of CPython 2.6&amp;#x2019;s features (eg. class decorators) - the backported 3.1 features in 2.7 aid 3.1 compatibility - unicode by default helps IronPython and Jython
  • #58 - 2.5 already supports some of CPython 2.6&amp;#x2019;s features (eg. class decorators) - the backported 3.1 features in 2.7 aid 3.1 compatibility - unicode by default helps IronPython and Jython
  • #59 - 2.5 already supports some of CPython 2.6&amp;#x2019;s features (eg. class decorators) - the backported 3.1 features in 2.7 aid 3.1 compatibility - unicode by default helps IronPython and Jython
  • #61 some big-name projects are done, some not so much posgresql but not mysql, even pl/python in psql supports 2&amp;3
  • #62 some big-name projects are done, some not so much posgresql but not mysql, even pl/python in psql supports 2&amp;3
  • #63 some big-name projects are done, some not so much posgresql but not mysql, even pl/python in psql supports 2&amp;3
  • #64 some big-name projects are done, some not so much posgresql but not mysql, even pl/python in psql supports 2&amp;3
  • #65 some big-name projects are done, some not so much posgresql but not mysql, even pl/python in psql supports 2&amp;3
  • #72 - due to last for entire 3.3 release cycle - Slow things down for a while to: 1. Let py3k settle for a while, 2. Let alternative implementations catch up - It&amp;#x2019;s not because &amp;#x201C;we&amp;#x2019;re done&amp;#x201D;
  • #73 Old GIL: ticks; multi-core systems degenerated badly New GIL: time (5ms by default) multi-core performance unaffected (still only one thread at a time though)
  • #74 Old GIL: ticks; multi-core systems degenerated badly New GIL: time (5ms by default) multi-core performance unaffected (still only one thread at a time though)
  • #75 Old GIL: ticks; multi-core systems degenerated badly New GIL: time (5ms by default) multi-core performance unaffected (still only one thread at a time though)
  • #85 The goal of cython could be described as providing an easy way to convert a Python module into a C extension.
  • #87 Django 1.2: multiple databases, improved CSRF, configurable email backends, messaging framework, smarter &amp;#x201C;if&amp;#x201D; tag, localization improvement, and a ton of other stuff
  • #88 Django 1.2: multiple databases, improved CSRF, configurable email backends, messaging framework, smarter &amp;#x201C;if&amp;#x201D; tag, localization improvement, and a ton of other stuff
  • #89 Django 1.2: multiple databases, improved CSRF, configurable email backends, messaging framework, smarter &amp;#x201C;if&amp;#x201D; tag, localization improvement, and a ton of other stuff
  • #90 Django 1.2: multiple databases, improved CSRF, configurable email backends, messaging framework, smarter &amp;#x201C;if&amp;#x201D; tag, localization improvement, and a ton of other stuff
  • #91 Django Ski - Whistler, 2-4 March 2010