This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: Add FrozenImporter.get_filename().
Type: behavior Stage: needs patch
Components: Library (Lib) Versions: Python 3.11
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: FFY00, eric.snow
Priority: normal Keywords:

Created on 2021-10-28 18:52 by eric.snow, last changed 2022-04-11 14:59 by admin.

Messages (2)
msg405225 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2021-10-28 18:52
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).

[2] in Lib/import/
[3] in Lib/import/
msg405226 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2021-10-28 19:00
Note that there isn't any intent currently to implement the FileLoader ABC [1], which would require having FrozenImporter instances, adding the "name" and "path" attributes to them, as well as the get_data() method.  The same goes for the SourceLoader ABC. [2]

Again, frozen modules don't have files but instead were only derived from files during the build process.  For frozen stdlib modules we happen to know where to find the corresponding source files.

Date User Action Args
2022-04-11 14:59:51adminsetgithub: 89822
2021-10-28 19:00:44eric.snowsetmessages: + msg405226
2021-10-28 18:52:00eric.snowcreate