Issue 26186: LazyLoader rejecting use of SourceFileLoader (original) (raw)
Issue26186
Created on 2016-01-23 19:28 by brett.cannon, last changed 2022-04-11 14:58 by admin. This issue is now closed.
Messages (13) | ||
---|---|---|
msg258873 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-01-23 19:28 |
It was privately reported to me that importlib.util.LazyLoader rejects using importlib.machinery.SourceFileLoader (or at least _frozen_importlib.SourceFileLoader). At least a test should be added for LazyLoader to make sure it will happily accept importlib.machinery.SourceFileLoader, and if it rejects the one from _frozen_importlib, tweak the test to accept loaders from there as well. | ||
msg258875 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-01-23 19:38 |
One way to possibly improve this is to remove the create_module() check and replace it with a warning if create_module() doesn't return None. Another option is to use an assert statement. The final option is to just drop the check entirely, although that can make debugging difficult. | ||
msg259157 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-01-28 20:30 |
I think I'm liking the following approach: if __debug__: hopefully_None = loader.create_module(spec) if hopefully_None is not None: warnings.warn("watch out!", ImportWarning) | ||
msg259584 - (view) | Author: Antoine Pitrou (pitrou) * ![]() |
Date: 2016-02-04 17:52 |
Just stumbled on this very issue while trying to use LazyLoader. | ||
msg259585 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-02-04 17:53 |
My current plan is to simply remove the check in 3.5 -- the docs say it's ignored so I don't think it will hurt anything -- and add the warning I proposed in 3.6. What do you think, Antoine? | ||
msg259586 - (view) | Author: Antoine Pitrou (pitrou) * ![]() |
Date: 2016-02-04 17:55 |
By the way does this mean the LazyLoader won't work with ExtensionFileLoader? That would reduce its usefulness quite a bit. | ||
msg259587 - (view) | Author: Antoine Pitrou (pitrou) * ![]() |
Date: 2016-02-04 17:56 |
I don't know what the impact of the error is, but it seems like at least the default loader classes should be able to work with LazyLoader... | ||
msg259588 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-02-04 18:02 |
You're right, it won't work with extension modules based on how ExtensionFileLoader is structured. | ||
msg260592 - (view) | Author: Roundup Robot (python-dev) ![]() |
Date: 2016-02-21 02:37 |
New changeset 9f1e680896ef by Brett Cannon in branch '3.5': Issue #26186: Remove an invalid type check in https://hg.python.org/cpython/rev/9f1e680896ef New changeset 86fc6cdd65de by Brett Cannon in branch 'default': Merge for issue #26186 https://hg.python.org/cpython/rev/86fc6cdd65de | ||
msg260593 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-02-21 02:44 |
This has been resolved by removing the check (the docs have always said the method was ignored, so that will just continue). I also did separate commit to list that BuiltinImporter and ExtensionFileLoader won't work (they would need to be updated to return a module subclass to work). I'm leaving this issue open to decide if I want to add an explicit check in importlib.util.LazyLoader.create_module() to verify that None is returned in Python 3.5 (I probably will, but I want to think about on it for a little bit). | ||
msg263524 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-04-15 20:09 |
I actually think this can be generalized thanks to some tweaks made in Python 3.6 which will lead to it working with extension modules. I need to double-check, but I think I can: - Eliminate the _Module class (and thus have _LazyModule inherit types.ModuleType directly) - Call create_module() and see if it returns something - Use spec.loader_state to store the original value of module.__class__ (probably be simply storing __class__ in the dict of values) - Just blindly try to set module.__class__ to _LazyModule and let the exception propagate if it fails - In _LazyModule.__getattribute__, temporarily assign the type to types.ModuleType to shut off __getattribute__() before assigning the proper value | ||
msg269244 - (view) | Author: Roundup Robot (python-dev) ![]() |
Date: 2016-06-25 17:58 |
New changeset 7af4b3ad75b7 by Brett Cannon in branch 'default': Issue #26186: Remove the restriction that built-in and extension https://hg.python.org/cpython/rev/7af4b3ad75b7 | ||
msg269245 - (view) | Author: Brett Cannon (brett.cannon) * ![]() |
Date: 2016-06-25 17:59 |
The restriction of lazily loading built-ins and extensions is now lifted! |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:58:26 | admin | set | github: 70374 |
2016-06-25 17:59:11 | brett.cannon | set | status: open -> closedmessages: + |
2016-06-25 17:58:24 | python-dev | set | messages: + |
2016-04-15 20:09:11 | brett.cannon | set | messages: + |
2016-02-21 02:44:23 | brett.cannon | set | resolution: fixedmessages: + stage: test needed -> resolved |
2016-02-21 02:37:13 | python-dev | set | nosy: + python-devmessages: + |
2016-02-04 18:02:51 | brett.cannon | set | messages: + |
2016-02-04 17:56:32 | pitrou | set | messages: + |
2016-02-04 17:55:41 | pitrou | set | messages: + |
2016-02-04 17:53:45 | brett.cannon | set | messages: + |
2016-02-04 17:52:18 | pitrou | set | nosy: + pitroumessages: + |
2016-01-31 20:38:02 | ethan.furman | set | nosy: + ethan.furman |
2016-01-28 20:30:36 | brett.cannon | set | messages: + |
2016-01-23 22:41:09 | kdart | set | nosy: + kdart |
2016-01-23 19:38:58 | brett.cannon | set | nosy: + ncoghlan, eric.snow |
2016-01-23 19:38:47 | brett.cannon | set | messages: + |
2016-01-23 19:28:00 | brett.cannon | create |