[Python-ideas] PEP: Distributing a Subset of the Standard Library
Steve Dower
steve.dower at python.org
Mon Nov 28 17:48:47 EST 2016
On 28Nov2016 1433, Steve Dower wrote:
> On 28Nov2016 1419, Nathaniel Smith wrote:
>> I'd suggest that we additional specify that if we find a
>> foo.missing.py, then the code is executed but -- unlike a regular
>> module load -- it's not automatically inserted into
>> sys.modules["foo"]. That seems like it could only create confusion.
>> And it doesn't restrict functionality, because if someone really wants
>> to implement some clever shenanigans, they can always modify
>> sys.modules["foo"] by hand.
>
> In before Brett says "you can do this with an import hook", because,
> well, we can do this with an import hook :)
And since I suggested it, here's a rough proof-of-concept:
import importlib.abc
import os
import sys
class MissingPathFinder(importlib.abc.MetaPathFinder):
def find_spec(self, fullname, path, target=None):
for p in (path or sys.path):
file = os.path.join(p, fullname + ".missing")
if os.path.isfile(file):
with open(file, 'r', encoding='utf-8') as f:
raise ModuleNotFoundError(f.read())
sys.meta_path.append(MissingPathFinder())
import foo
Add a "foo.missing" file to your working directory and you'll get the
message from that instead of the usual one.
Cheers,
Steve
More information about the Python-ideas
mailing list