Title: Consider leaving
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.4, Python 3.5
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: brett.cannon Nosy List: Arfrever, Borisd13, Claudiu.Popa, brett.cannon, eric.snow, martin.panter, ncoghlan, nikicat, srittau
Priority: normal Keywords:

Created on 2014-05-05 12:00 by srittau, last changed 2015-12-13 00:30 by berker.peksag. This issue is now closed.

Messages (4)
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", "")

Unfortunately, this became much more obscure in Python 3.3:

import importlib.machinery
loader = importlib.machinery.SourceFileLoader("what.ever", "")
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 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 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.
msg255901 - (view) Author: Brett Cannon (brett.cannon) * (Python committer) Date: 2015-12-04 23:56
Python 3.5 lets you do:

  spec = importlib.util.spec_from_file_location('what.ever', '')
  module = importlib.util.module_from_spec(spec)

I am satisfied that case for loading from a file is easy enough to not warrant keeping load_module() around just for this use case.
Date User Action Args
2015-12-13 00:30:07berker.peksagsetstatus: open -> closed
2015-12-04 23:56:46brett.cannonsetresolution: rejected
messages: + msg255901
stage: resolved
2014-10-18 05:07:25martin.pantersetnosy: + martin.panter
2014-10-15 19:55:41nikicatsetnosy: + nikicat
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
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