Think Carefully Before Upgrading to Python 3

Upgrading software in a timely matter is important (as I wrote here), but I don’t always follow my own advice. I have a client who uses Python, which is currently on version 3.3. The client is using Python 2.7, and I’ve recommended that they not upgrade. In other words: I think upgrading is a bad idea. Why?

Python 3.3 was released on Oct. 1, 2012. As of that date, the most popular version of the programming language is… 2.7. Yes, one whole major version old.

Let’s look at a brief history of Python 3:

December 2008: Python 3.0 released

July 2010: The official Python documentation sets an end-of-life date for Python 2.7 (the last of the 2.x releases) and notes that Python 2.x is still useful for applications using unported modules.

October 2012: Python 3.3 released

By the guidelines we talked about earlier, we should definitely be on a 3.x branch now. Yet a multitude of python users haven’t upgraded. Why? For one simple reason: Python 3.0 is the first intentionally backwards incompatible version of Python. That means that things won’t “just work” when you upgrade. And that’s slowing down adoption.

This is a classic good news/bad news situation. The good news is that there are Python 2->3 converter tools that will help you move your code. The bad news is that Python has a very rich ecosystem, and a lot of those tools and libraries haven’t yet been converted. Some extremely popular libraries just plain don’t work with Python 3. For example:

Boto: A library that interfaces with Amazon Web Services. Supports 3.0 on a development branch, but not yet released.

Django: A popular content-management framework. Supports 3.0 on a development branch, but not yet released.

The good news for Python-istas is that some other major libraries have added Python 3 support over the last year or so. They include pycrypto (cryptography functions), numpy and scipy (scientific computing packages), nose (a testing tool), and others. More and more people can upgrade as their dependencies are met on Python 3.

Keeping up is important. Just make sure that you and your dependencies can handle the change.