The State of Python
… and the web
Armin Ronacher // @mitsuhiko
Slide 2
Slide 2 text
Who am I
• Armin Ronacher (@mitsuhiko)
• Founding Member of the “Pocoo Team”
• we're doing Jinja2, Werkzeug, Flask,
Pygments, Sphinx and a bunch of other
stuff.
Slide 3
Slide 3 text
Crossroads
Slide 4
Slide 4 text
Python 3
• The Elephant in the Room
Slide 5
Slide 5 text
Python in 2011
• The big Python 3 versus Python 2
debate
• PyPy is making tremendous progress
Slide 6
Slide 6 text
Recent Python News
• Unladen Swallow is resting
• Python 3.2 was released
• Python's packaging infrastructure is
being worked on.
• distutils2 / packaging in Python 3
Slide 7
Slide 7 text
Recent PyPy News
• PyPy gets experimental support for the
CPython C API
• PyPy got 10.000$ by the PSF
• PyPy 1.5 released
• Are you using PyPy in production? Why
not? http://bit.ly/pypy-survey
Slide 8
Slide 8 text
PyPy
Slide 9
Slide 9 text
PyPy Right Now
• “Python written in Python”
• PyPy trunk 3.7x faster than CPython
over a wide variety of benchmarks
• Up to 40x faster for certain benchmarks
• Compatible with Python 2.7.1
Slide 10
Slide 10 text
Really Fast
• http://speed.pypy.org/
Slide 11
Slide 11 text
Things that will break
• There is only experimental support for
the Python C API and it will always be
slow.
• Different garbage collection behavior, no
reference counting.
Slide 12
Slide 12 text
Things that work
• Django
• Flask
• ctypes
• pyglet
• twisted
• sqlite
Slide 13
Slide 13 text
The Bonus
• Sandbox support
• Stackless execution mode
• A .NET backend
Slide 14
Slide 14 text
Python 3
Slide 15
Slide 15 text
Python 3 is …
• … where all new language developments
are happening
• … adding unicode to the whole stack
• … cleaning up the language
• … breaking backwards compatibility
Slide 16
Slide 16 text
The Good Parts
• Introduces unicode into exceptions and
source compilation as well as identifiers
• Greatly improved IO API regarding
unicode
• New language constructs
• Implementation cleaned up a lot
Slide 17
Slide 17 text
New Constructs
• Extended iterable unpacking
• Keyword only arguments
• nonlocal
• Function parameter and return value
annotations
Slide 18
Slide 18 text
Improved Things
• print as a function
• Improved syntax for catching and raising
exceptions
• Ellipsis (…) syntax element now available
everywhere
Slide 19
Slide 19 text
Different Behavior
• More powerful metaclasses (but
removed support for some tricks people
relied on*)
• List comprehensions are now from the
behavior much closer to generator
expressions
• * don't abuse undocumented “features”
Slide 20
Slide 20 text
Warts removed
• Argument unpacking
• Unused nested tuple raising syntax
• Longs no longer exposed
• Classic classes gone
• Absolute imports by default
• Obscure standard library modules
Slide 21
Slide 21 text
Common Ground
Slide 22
Slide 22 text
New in 2.6/2.7
• Explicit byte literals, make upgrading
easier
• Advanced string formatting
• Print as a function
• Class decorators
• New IO library
Slide 23
Slide 23 text
New in 2.6/2.7
• The multiprocessing package
• Type hierarchy for numbers
• Abstract base classes
• Support for fractions
Slide 24
Slide 24 text
Going Forward
Slide 25
Slide 25 text
Beauty or Speed
• Right now it's a decision between the
beauty of the code (Python 3) or the raw
performance (PyPy).
• PyPy itself will probably always be written
in Python 2, but the interpreter might at
one point support Python 3.
Slide 26
Slide 26 text
Library Support
• Numeric libraries work great on Python 3
and benefit of improvements in the
language.
• PyPy still lacks proper support for the C-
API of Python.
Slide 27
Slide 27 text
Predictions
• Most people will write their code against
2.7 with the intention of supporting PyPy.
• Libraries that require the Python C API
will become less common
• We will see libraries that support
targeting both Python 2.7 and Python
3.x.
Slide 28
Slide 28 text
Python and the Web
Slide 29
Slide 29 text
WSGI
• New revision for Python 3
• There is some work done to port
implementations to Python 3
• No longer something people actively care
about. “It works”
Slide 30
Slide 30 text
New Developments
• Improvements to PyPy's support for
database adapters
• Improvements in template compilation to
take advantage of PyPy's behavior.
• Porting some libraries over to Python 3.
Slide 31
Slide 31 text
Making Python 3 work
Slide 32
Slide 32 text
Python 3 can work
• Start porting libraries over.
• Issues with Python 3 will only be resolved
if people actively try to port.
• The higher level the application, the
easier to port. Libraries are the culprit.
Slide 33
Slide 33 text
And it's not hard
• When you're at the port where you can
drop Python 2.6 support, you can write
code that survives 2to3 mostly without
hacks in the code.
• http://bit.ly/python3-now
Slide 34
Slide 34 text
Frameworks
Slide 35
Slide 35 text
We're doing great
• WSGI works out well in practice.
• Pylons and BFG -> Pyramid, nice
introduction into the ZOPE world.
• Less and less framework specific code
out there, easier to reuse.
Low Level
• Werkzeug
• WebOb
• these two might actually merge at one
point in the future
Slide 38
Slide 38 text
Frameworks are Good
• New frameworks are necessary to
explore new paradigms and concepts.
• It's surprisingly easy to switch
frameworks or parts of frameworks in
Python.
• Frameworks are merging and evolving.