From e850685a9f008ed8d67d8b143b3e52f4bc62897c Mon Sep 17 00:00:00 2001 From: Rok Mandeljc Date: Sat, 3 Apr 2021 19:09:47 +0200 Subject: [PATCH] loader: implement FrozenImporter source loading from .py files Provide basic FrozenImporter.get_source() implementation that allows loading of source from .py files that have been collected by hooks as data files. --- PyInstaller/loader/pyimod03_importers.py | 9 +++++++++ news/5697.feature.rst | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 news/5697.feature.rst diff --git a/PyInstaller/loader/pyimod03_importers.py b/PyInstaller/loader/pyimod03_importers.py index 40931371f8..9de19fdfbd 100644 --- a/PyInstaller/loader/pyimod03_importers.py +++ b/PyInstaller/loader/pyimod03_importers.py @@ -328,6 +328,15 @@ def get_source(self, fullname): Return None. """ if fullname in self.toc: + # Try loading .py file from the filesystem + filename = pyi_os_path.os_path_join( + SYS_PREFIX, + fullname.replace('.', pyi_os_path.os_sep) + '.py') + try: + with open(filename, 'r') as fp: + return fp.read() + except FileNotFoundError: + pass return None else: # ImportError should be raised if module not found. diff --git a/news/5697.feature.rst b/news/5697.feature.rst new file mode 100644 index 0000000000..b4fb19be26 --- /dev/null +++ b/news/5697.feature.rst @@ -0,0 +1,3 @@ +Provide basic implementation for ``FrozenImporter.get_source()`` that +allows reading source from ``.py`` files that are collected by hooks as +data files.