From: Victor Stinner Date: Wed, 21 Jun 2023 22:18:31 +0000 (+0200) Subject: gh-104212: Explain how to port imp.load_source() (#105978) X-Git-Tag: v3.13.0a1~1679 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=18a7c86697493510993e43bafe8bd4046928bec5;p=thirdparty%2FPython%2Fcpython.git gh-104212: Explain how to port imp.load_source() (#105978) Explain how to port removed imp.load_source() to importlib in What's New in Python 3.12. --- diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst index 1a50bce0b65e..d8a236080c00 100644 --- a/Doc/whatsnew/3.12.rst +++ b/Doc/whatsnew/3.12.rst @@ -1386,6 +1386,21 @@ Removed ``imp.source_from_cache()`` :func:`importlib.util.source_from_cache` ================================= ======================================= + * Replace ``imp.load_source()`` with:: + + import importlib.util + import importlib.machinery + + def load_source(modname, filename): + loader = importlib.machinery.SourceFileLoader(modname, filename) + spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) + module = importlib.util.module_from_spec(spec) + # The module is always executed and not cached in sys.modules. + # Uncomment the following line to cache the module. + # sys.modules[module.__name__] = module + loader.exec_module(module) + return module + * Removed :mod:`!imp` functions and attributes with no replacements: * undocumented functions: @@ -1394,7 +1409,6 @@ Removed * ``imp.load_compiled()`` * ``imp.load_dynamic()`` * ``imp.load_package()`` - * ``imp.load_source()`` * ``imp.lock_held()``, ``imp.acquire_lock()``, ``imp.release_lock()``: the locking scheme has changed in Python 3.3 to per-module locks.