diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index 50f4ee4af85..0adeefb2dc6 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -499,7 +499,7 @@ ABC hierarchy:: .. versionchanged:: 3.4 Raises :exc:`ImportError` instead of :exc:`NotImplementedError`. - .. method:: source_to_code(data, path='') + .. staticmethod:: source_to_code(data, path='') Create a code object from Python source. @@ -508,8 +508,14 @@ ABC hierarchy:: the "path" to where the source code originated from, which can be an abstract concept (e.g. location in a zip file). + With the subsequent code object one can execute it in a module by + running ``exec(code, module.__dict__)``. + .. versionadded:: 3.4 + .. versionchanged:: 3.5 + Made the method static. + .. method:: exec_module(module) Implementation of :meth:`Loader.exec_module`. diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst index fbbac037a18..4410de666d8 100644 --- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -158,6 +158,11 @@ Improved Modules *module* contains no docstrings instead of raising :exc:`ValueError` (contributed by Glenn Jones in :issue:`15916`). +* :func:`importlib.abc.InspectLoader.source_to_code` is now a + static method to make it easier to work with source code in a string. + With a module object that you want to initialize you can then use + ``exec(code, module.__dict__)`` to execute the code in the module. + Optimizations ============= diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py index 558abd3d9a4..7f6f235971d 100644 --- a/Lib/importlib/abc.py +++ b/Lib/importlib/abc.py @@ -217,7 +217,8 @@ class InspectLoader(Loader): """ raise ImportError - def source_to_code(self, data, path=''): + @staticmethod + def source_to_code(data, path=''): """Compile 'data' into a code object. The 'data' argument can be anything that compile() can handle. The'path' diff --git a/Misc/NEWS b/Misc/NEWS index d47cebc1841..4b662b2c1fa 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -73,6 +73,9 @@ Core and Builtins Library ------- +- Issue #21156: importlib.abc.InspectLoader.source_to_code() is now a + staticmethod. + - Issue #21396: Fix TextIOWrapper(..., write_through=True) to not force a flush() on the underlying binary stream. Patch by akira.