The tools for supporting Python 2 & 3 in a single code base have improved significantly from the early Python 3 days of just 2to3. Porting Python 2 code to work with Python 2 & 3 without a constant 2to3 translation step is not hard anymore, and leads to much easier-to-maintain ports.
In this talk, I will discuss some of the suggested best practices for supporting both Python 2 and Python 3. We will cover some of the tools for detecting potential issues, such as pylint, the available options, such as six, futurize and modernize, to simplify the process of updating the code and spend some time discussing what parts of porting still require care and attention, such as the text / binary data division.