python3 had no compatibility mode, so everyone needed 100% of their dependencies to migrate. This was so painful that some teams abandoned their legacy python2 code and reimplemented in languages with better back compat stories.
Python 3 was announced way ahead and came with migration tools that worked pretty well. Besides character handling most of the stuff was pretty similar at the beginning and I never understood why apparently nobody or only a few projects made the switch early on.
That lead to a chicken and egg situation: if you depended on those libraries that did not migrate to python3 you where stuck at python 2 as well.
I believe being nice to the community and supporting python 2 for a long time was a mistake. They should have made a hard break and enforce the migration...