This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: We need a good replacement for direct use of load_module(), post-PEP 451
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.5
process
Status: closed Resolution: out of date
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 2022-04-11 14:57 by admin. This issue is now closed.

Messages (4)
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.
msg364553 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2020-03-18 18:33
I don't think this is still needed as the importlib docs now has enough examples to show people how to get to get similar results with a few method calls.
History
Date User Action Args
2022-04-11 14:57:56adminsetgithub: 64324
2020-03-18 18:33:56brett.cannonsetstatus: open -> closed
resolution: out of date
messages: + msg364553

stage: needs patch -> resolved
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