We are now running on the Python 3.6 runtime. This has been a significant challenge - we have 170k lines of python code, and we'd paid no attention to the upgrade path before we decided to tackle it. We'll write a full technical post on how we did it, but in the meantime, I'd like to say a big thank you to those involved - specifically @miphreal and @kanstantsin-nikitsin, who had no exposure to the codebase prior to tackling the migration, and who completed it in 6 weeks.
Python3 has been around for nearly a decade. If you take a look http://py3readiness.org/ you'll see that almost all of the most popular packages are now py3 compatible, and we're starting to see packages dropping support for py2. Django has been py3 compatible since v1.5 (we launched on 1.4) - and when we hit a target figure of 90% of our dependencies (of which there are over 100) being compatible, that set the clock ticking.
The default Heroku runtime switched from 2.7.13 to 3.6.1 some time ago. Although this didn't affect us, it was another signal to pick up on. If your hosting platform can support vNext, so can you.
The biggest reason however, is the impending Django 2.0 release, which will no longer guarantee support for py2. Keeping within one major release of the latest is one of our KPIs as a team, and this was going to be impossible if we stuck with py2.
Next up - Django 1.11.
- Migration, part 2: technical details
- Migration, part 3: aftermath - upgrading dev environments, retiring py2