classification
Title: Consider leaving importlib.abc.Loader.load_module()
Type: enhancement Stage:
Components: Library (Lib) Versions: Python 3.5, Python 3.4
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: brett.cannon Nosy List: Arfrever, Borisd13, Claudiu.Popa, brett.cannon, eric.snow, ncoghlan, srittau
Priority: normal Keywords:

Created on 2014-05-05 12:00 by srittau, last changed 2014-05-26 05:55 by eric.snow.

Messages (3)
msg217919 - (view) Author: Sebastian Rittau (srittau) * Date: 2014-05-05 12:00
It was very easy to load plugin files in Python 2:

import imp
my_module = imp.load_source("what.ever", "foo.py")

Unfortunately, this became much more obscure in Python 3.3:

import importlib.machinery
loader = importlib.machinery.SourceFileLoader("what.ever", "foo.py")
my_module = loader.load_module("what.ever")

In Python 3.4 even this has been deprecated. There should be a way (preferable an easy-to-use one) to load a Python module by filename or by stream.
msg217923 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2014-05-05 13:46
So it's not quite as bad as you think as SourceFileLoader.load_module() doesn't need an argument (I've opened http://bugs.python.org/issue21438 to fix the documentation). Admittedly it is a longer command than imp.load_source() to type, but there is no extra information required or a necessity that you break the command up into multiple lines.

Plus imp.load_source() is just plain bad. The reason the imp module is deprecated in Python 3.4 is because it does not expose the low-level details of import in a way that makes any sense since Python 2.3 (and yes, I meant to write 2.3 instead of 3.3; the problem has persisted _that_ long).

That being said, talks are just starting to consider undoing the documented deprecation of load_module() such that you can continue to use that as a substitute for imp.load_source()/imp.load_module().

I'm going to leave this bug open, hijack its title, and refocus this as to consider leaving importlib.abc.Loader.load_module() in importlib as the all-powerful fallback API which also simplifies transitioning from imp.
msg219134 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2014-05-26 05:55
I'd rather see something like "load_from_spec()" added to importlib.util, a la issue #21235.
History
Date User Action Args
2014-05-26 05:55:03eric.snowsetmessages: + msg219134
2014-05-13 00:31:38Borisd13setnosy: + Borisd13
2014-05-11 12:05:41Arfreversetnosy: + Arfrever
2014-05-05 13:46:59brett.cannonsetnosy: + ncoghlan
title: bring back importlib.load_source() et al. -> Consider leaving importlib.abc.Loader.load_module()
messages: + msg217923

assignee: brett.cannon
2014-05-05 12:21:32berker.peksagsetnosy: + brett.cannon, eric.snow
2014-05-05 12:08:29Claudiu.Popasetnosy: + Claudiu.Popa
2014-05-05 12:00:08srittaucreate