2010-07-04

Python 2.7 released (and what that means)

[removed my use of the term "minor release"; apparently people think 2.6 -> 2.7 is a major release -- not minor like me -- without having a term for a 2 -> 3 release which I consider "major"]

Python 2.7 was released today. As always you should read the 2.7 "What's New" document to get all the details of what has been added/removed/changed.

There are two things I want to explicitly mention about this release (which are both covered by the "What's New" doc, but I realize not everyone is going to read it and I want this info disseminated as widely as possible).

First, (Pending)DeprecationWarning is now silent by default (this is also going to be true in Python 3.2). It was decided that having deprecation warnings be shown to a user of Python simply because the software they are using has not gotten around to updating for the latest Python release was unreasonable; if I am using Mercurial, why do I care if they are using the old sha module (they have fixed this, but this was an actual problem when Python 2.6 came out)? As a user I don't need to know that; only a developer really cares about deprecation warnings. To switch deprecations back on, you can pass -Wd to the interpreter. All of this is discussed in the warnings documentation as well as the "What's New" doc.

Second, I want to mention what releasing Python 2.7 means for the 2.x series. With this out the door, Python's develop drops down to three branches: 2.7, 3.1, and 3.2 (release-27maint, release-31maint, and py3k, respectively). The trunk branch will be closed to commits as py3k symbolically becomes the trunk, but we didn't want existing checkouts to suddenly change to py3k for people (plus the hg transition makes a rename a waste of time at this point).

This also means that there will be no more new feature releases in the Python 2.x series, meaning Python 2.x has reached an evolutionary dead-end. Now obviously the Python 2.x series has a large number of users, so python-dev is not about to simply stop paying attention to 2.7. On the contrary, we expect to have a longer-than-usual bugfix timeline for Python 2.7, so you do not need to worry about it getting ignored and not getting bugfix releases. But in terms of new features, those go into Python 3.x exclusively for now on.

My hope is that having a very clear goal in mind for Python 2.x version support, the Python 2.7 release will become widely deployed. With its availability being large, people can then start to target the version, allowing them to at least hopefully catch up to Python 2.6 quickly, if not leap frog it and go straight to Python 2.7. If people could get their code running on Python 2.6 or 2.7 (preferably the latter), then people could start to use 2to3 and the -3 flag to get their code working in Python 3. At that point supporting Python 3 starts to become just another Python version you support.

And for all of you project maintainers who have code up on PyPI, don't forget to update your DOAP categories to list Python 2.7 once you have verified your code is compatible.