From: Michael Jeanson Date: Thu, 14 Dec 2023 22:11:42 +0000 (-0500) Subject: fix: 'load_module()' deprecated in Python 3.12 X-Git-Tag: v2.0.6~8 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=0824d69ac4940b8d1277f6eb5dad8860c7f55088 fix: 'load_module()' deprecated in Python 3.12 Starting with Python 3.10 we get the following warning: :283: DeprecationWarning: the load_module() method is deprecated and slated for removal in Python 3.12; use exec_module() instead Replace our use of 'load_module()' with the recommended [1] alternative that includes 'module_from_spec()' introduced in Python 3.5. Since we need to support Python 3.4, keep the original code with a version check. [1] https://docs.python.org/3.12/library/importlib.html#importlib.machinery.SourceFileLoader.load_module Change-Id: I77d14f14fcc39e0227baad959c3e211aba309a21 Signed-off-by: Michael Jeanson Reviewed-on: https://review.lttng.org/c/babeltrace/+/11583 Tested-by: jenkins Reviewed-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/11704 CI-Build: Simon Marchi Reviewed-by: Philippe Proulx --- diff --git a/src/bindings/python/bt2/bt2/py_plugin.py b/src/bindings/python/bt2/bt2/py_plugin.py index f1142766..50bfe91a 100644 --- a/src/bindings/python/bt2/bt2/py_plugin.py +++ b/src/bindings/python/bt2/bt2/py_plugin.py @@ -123,8 +123,18 @@ def _try_load_plugin_module(path): h.update(path.encode()) module_name = 'bt_plugin_{}'.format(h.hexdigest()) assert module_name not in sys.modules + # try loading the module: any raised exception is catched by the caller - mod = importlib.machinery.SourceFileLoader(module_name, path).load_module() + if sys.version_info < (3, 5): + mod = importlib.machinery.SourceFileLoader(module_name, path).load_module() + else: + import importlib.util + + loader = importlib.machinery.SourceFileLoader(module_name, path) + spec = importlib.util.spec_from_file_location(module_name, path, loader=loader) + mod = importlib.util.module_from_spec(spec) + sys.modules[mod.__name__] = mod + loader.exec_module(mod) # we have the module: look for its plugin info first if not hasattr(mod, '_bt_plugin_info'):