
Jeffrey Kintscher writes:
If you use a problematic practice and a change to Python causes a symbol conflict for you, that's on you, not Python.
You are welcome to think that way. It's not representative of the Python development community, though. We[1] care about breaking existing code, even if we don't think much of it.
Furthermore, "from module import *" is implicitly blessed, not only by that idiom itself (which requires special treatment in the parser!), but also by the existence of the __all__ dunder, which allows module authors to control which identifiers can be imported that way. Given that, evidently not all instances of "from module import *" are problematic, and which are problematic is a matter of taste. The principle of "consenting adults" means that unless we have a good reason, we'd rather avoid breaking *future* code that uses valid syntax.
A fairly tight sufficient condition is "there's no sane way to do it". For example, if Serhiy's "from ast import literal_eval; literal_eval('1e1000')" was the only way to spell infinity, there'd be an overwhelming sense that "we gotta do something." But when we already have two ways ("float('inf')" and "from math import inf; inf") you're gonna get float('inf') pushback instead.
Footnotes: [1] Yeah, I think I can speak for the community on this one.