]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-104212: Explain how to port imp.load_source() (GH-105978) (#106083)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 25 Jun 2023 15:14:18 +0000 (08:14 -0700)
committerGitHub <noreply@github.com>
Sun, 25 Jun 2023 15:14:18 +0000 (17:14 +0200)
gh-104212: Explain how to port imp.load_source() (GH-105978)

Explain how to port removed imp.load_source() to importlib in What's
New in Python 3.12.
(cherry picked from commit 18a7c86697493510993e43bafe8bd4046928bec5)

Co-authored-by: Victor Stinner <vstinner@python.org>
Doc/whatsnew/3.12.rst

index ed4657c5b7a4a21c2bfa40e18411c70c5aae0252..e06faf3ccaa1a62b703c6be7ffb0d86f697b77f9 100644 (file)
@@ -1385,6 +1385,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:
@@ -1393,7 +1408,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.