And that's a good thing! Do not hold on to broken cruft but give some time (more than just a few months (Ansible and other culprits) but definitely less tan 10 years (Python 3 transition)) for code maintainers to handle it.
They should respect semantic versioning and ensure that any 3.x version remains backwards compatible with 3.0 code.
Python does not use semantic versioning and never has.
Removing “broken cruft” from a programming language’s standard library has a very high cost associated with it. If you look at Java, the list of things removed in the past decade is quite short [0], and the removed things probably weren’t super important or popular. Python’s deletionists go too far IMO.