The unicode is the most difficult part of the migration, because most of python 2 code is actually broken, it can't be automated because you need to know what you want whether you need text or bytes.
b'A',b'B'
b'1',b'2'
That's not seamless, and I wouldn't say it helps non-English speakers either.This bug impacts Pandas to_csv as well.
Since ASCII strings are always one byte per character, they can be manipulated as bytes, but UTF8 strings aren't. In Python3 you operate with strings and always get strings, you operate with bytes and always get bytes.
The string = byte array pattern is an atavism that should not exist this century.
That wasn't done, but for reasons that amount to "we don't want to"...
I simply believe the python authors made the wrong choice.
Well, and giant glaring differences in internals. Python3 and python2 have incompatible bytecodes. Swapping compilers on a per-file basis in a language as dynamic as python isn't possible. Python allows dynamic re-writing of modules and source code. How do you decide which version a module is run with if the module is modified at runtime?
And if you're not talking about making all the same changes...then it doesn't sound like everything else could have been done in Python 2.