Brett Cannon added the comment:

I think that's the wrong abstraction(it would be fine in a third-party library, 
though, that's trying to smooth over 3.3->3.4 transitions). Since 
importlib.util.find_spec() always returns a spec, then you want something more 
like::

  def load(spec):
    loader = spec.loader
    if hasattr(loader, 'exec_module'):
        module = importlib.util.whatever_issue_20383_leads_to()
        loader.exec_module(module)
        return module
    else:
        loader.load_module(spec.name)
        return sys.modules[spec.name]

Since this is Python 3.5 code we are talking about you don't have to worry 
about the find_loader/find_module case as find_spec wraps both of those and 
normalizes it all to just using specs. You could even tweak it to pass the 
module in explicitly and in the load_module branch make sure that the module is 
placed in sys.modules first so it essentially becomes a reload (but as both 
know that's not exactly the same nor pleasant in certain cases so probably best 
not exposed that way =).

If this exists in importlib.util then you make import_module() be 
(essentially)::

  def import_module(name, package):
    fullname = resolve_name(name, package)
    spec = find_spec(fullname)
    return load(spec)

----------
dependencies: +Add a keyword-only spec argument to types.ModuleType

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21235>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to