From e3c68e9ea99b118f1aac2729b355180bd65053b1 Mon Sep 17 00:00:00 2001 From: Sarkis Ter Martirosyan Date: Wed, 23 Oct 2024 01:38:54 +0200 Subject: [PATCH] Check for imp availability (due to removal in Python 3.12) and use importlib if necessary. (#1569) --- .../pydevd/pydev_ipython/qt_loaders.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py index b69c7134..b9efa430 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py @@ -130,6 +130,7 @@ def has_binding(api): import importlib try: + import imp # importing top level PyQt4/PySide module is ok... mod = __import__(module_name) # ...importing submodules is not @@ -143,6 +144,28 @@ def has_binding(api): return check_version(mod.__version__, "1.0.3") else: return True + + except ModuleNotFoundError: + from importlib import machinery + + # importing top level PyQt4/PySide module is ok... + mod = __import__(module_name) + + # ...importing submodules is not + loader_details = (machinery.ExtensionFileLoader, machinery.EXTENSION_SUFFIXES) + submod_finder = machinery.FileFinder(mod.__path__[0], loader_details) + submod_check = ( + submod_finder.find_spec("QtCore") is not None + and submod_finder.find_spec("QtGui") is not None + and submod_finder.find_spec("QtSvg") is not None + ) + + # we can also safely check PySide version + if api == QT_API_PYSIDE: + return check_version(mod.__version__, '1.0.3') and submod_check + else: + return submod_check + except ImportError: return False