Now that __file__ is set on frozen (stdlib) modules, we can add an implementation for FrozenImporter.get_filename(). This would make FrozenImporter and implementation of ExecutionLoader. [1]
There is a caveat: in spec_from_loader() [2] we infer the presence of get_filename() to mean the loader is file-based, which FrozenImporter isn't.
In that case we call spec_from_file_location() [3], which should not be used for frozen modules. Most importantly, spec.origin for frozen modules should remain "frozen", spec.cached should remain None, and spec.has_location should remain False. That's because the module was imported frozen and not from a file (even though it originated in a file).
[1] https://docs.python.org/3/library/importlib.html#importlib.abc.ExecutionLoader
[2] in Lib/import/_bootstrap.py
[3] in Lib/import/_bootstrap_external.py
|