To deal with name conflicts in macro imports, the least surprise requires that we follow Python's regular import semantics (latest definition of a particular name wins).
So we should upgrade both consoles to behave that way. This allows shortening the explanation.
MacroPy's detect_macros() has no side effects other than triggering imports, so we can manage the macro bindings ourselves. The bindings are held in the object we hand to the macro expander.
To deal with name conflicts in macro imports, the least surprise requires that we follow Python's regular import semantics (latest definition of a particular name wins).
So we should upgrade both consoles to behave that way. This allows shortening the explanation.
MacroPy's
detect_macros()
has no side effects other than triggering imports, so we can manage the macro bindings ourselves. The bindings are held in the object we hand to the macro expander.