classification
Title: We need a good replacement for direct use of load_module(), post-PEP 451
Type: enhancement Stage: needs patch
Components: Library (Lib) Versions: Python 3.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, brett.cannon, eric.snow, larry, ncoghlan
Priority: high Keywords:

Created on 2014-01-05 02:17 by eric.snow, last changed 2014-01-07 04:00 by eric.snow.

Messages (3)
msg207326 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2014-01-05 02:17
In issue #19713, it came up that while PEP 451 deprecated Loader.load_module(), it did not provide a suitable replacement for calling it directly.  We've worked around this in the stdlib by making calls to private APIs, but that won't work so well for the community at large.

The importlib._bootstrap._SpecMethods class is one we had considered making public, but decided to defer that decision until people demonstrated an interest/need.

At this point in the 3.4 release cycle I'm not sure how much we can do about it.  Adding something like the following would be easy, but then we'd be stuck indefinitely with an API that we may just deprecate in 3.5 (a one-hit wonder), though that might be the lesser evil.

def load_from_spec(spec):
    _spec = importlib._bootstrap._SpecMethods(spec)
    return _spec.load()

Adding that as a recipe to the load_module() docs wouldn't work too well either, since we'd still be advocating the use of a private API as a workaround.

To be honest, I'll have to defer to Brett, Nick, et al. on this one.  They have the experience to know the best approach to take here.  I just haven't been in the majors long enough.

(Where'd Guido put the keys to that time machine?)
msg207404 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2014-01-05 22:25
I say just be patient and wait. No need to rush this as load_module() is still allowed to exist and be used. And if I manage to create SpecLoader than even new-fangled loaders and get load_module() for free.
msg207505 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2014-01-07 04:00
Yeah, waiting on this until 3.5 is fine with me.  Arfrever brought it up so I at least wanted to track it.
History
Date User Action Args
2014-01-07 04:00:40eric.snowsetstage: needs patch
messages: + msg207505
versions: + Python 3.5, - Python 3.4
2014-01-05 22:25:30brett.cannonsetmessages: + msg207404
2014-01-05 02:20:13eric.snowsetnosy: + larry
2014-01-05 02:17:52eric.snowcreate