diff -r 05e3fa254b6b -r 9cbbf9118c6c hgdemandimport/demandimportpy2.py --- a/hgdemandimport/demandimportpy2.py Sun Jul 16 17:19:22 2017 +0900 +++ b/hgdemandimport/demandimportpy2.py Sun Jul 16 17:38:39 2017 +0900 @@ -227,10 +227,14 @@ # recurse down the module chain, and return the leaf module mod = rootmod for comp in modname.split('.')[1:]: - if getattr(mod, comp, nothing) is nothing: - setattr(mod, comp, _demandmod(comp, mod.__dict__, - mod.__dict__, level=1)) - mod = getattr(mod, comp) + obj = getattr(mod, comp, nothing) + if obj is nothing: + obj = _demandmod(comp, mod.__dict__, mod.__dict__, level=1) + setattr(mod, comp, obj) + elif mod.__name__ + '.' + comp in sys.modules: + # prefer loaded module over attribute (issue5617) + obj = sys.modules[mod.__name__ + '.' + comp] + mod = obj return mod if level >= 0: