That approach sounds good to me.
The main problem cases I'm aware of are:
__name__:
* reliably wrong in __main__
* the attribute you mess with if you want __qualname__ on functions and classes to be different so that pickle will import them from somewhere else (e.g. a parent package)
__path__:
* used for dynamic package definitions (including namespace package emulation)
__package__:
* AFAIK, mainly useful as a workaround for other people doing "bad things" (TM), like running package submodules directly as __main__ rather than using the -m switch