From ff96b06f54bbab231a5b859b7ba5c405edfa69df Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 17 Apr 2022 11:00:43 +1200 Subject: Fix make earlyinit and version PyQt version independant These require a bit of special casing due to how they handle imports. --- qutebrowser/misc/earlyinit.py | 29 ++++++++++++++++++++++------- qutebrowser/utils/version.py | 8 ++++---- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index 2c71804e7..d0396ced8 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -137,7 +137,14 @@ def init_faulthandler(fileobj=sys.__stderr__): def check_pyqt(): """Check if PyQt core modules (QtCore/QtWidgets) are installed.""" - for name in ['PyQt5.QtCore', 'PyQt5.QtWidgets']: + pyqt_name = "PyQt6" + try: + import PyQt5 + pyqt_name = PyQt5.__name__ + except ImportError: + pass + + for name in [f'{pyqt_name}.QtCore', f'{pyqt_name}.QtWidgets']: try: importlib.import_module(name) except ImportError as e: @@ -228,13 +235,21 @@ def _check_modules(modules): def check_libraries(): """Check if all needed Python libraries are installed.""" + pyqt_name = None + try: + import PyQt5 + pyqt_name = PyQt5.__name__ + except ImportError: + import PyQt6 # type: ignore[import] + pyqt_name = PyQt6.__name__ + modules = { 'jinja2': _missing_str("jinja2"), 'yaml': _missing_str("PyYAML"), - 'PyQt5.QtQml': _missing_str("PyQt5.QtQml"), - 'PyQt5.QtSql': _missing_str("PyQt5.QtSql"), - 'PyQt5.QtOpenGL': _missing_str("PyQt5.QtOpenGL"), - 'PyQt5.QtDBus': _missing_str("PyQt5.QtDBus"), + f'{pyqt_name}.QtQml': _missing_str(f"{pyqt_name}.QtQml"), + f'{pyqt_name}.QtSql': _missing_str(f"{pyqt_name}.QtSql"), + f'{pyqt_name}.QtOpenGL': _missing_str(f"{pyqt_name}.QtOpenGL"), + f'{pyqt_name}.QtDBus': _missing_str(f"{pyqt_name}.QtDBus"), } if sys.version_info < (3, 9): # Backport required @@ -248,7 +263,8 @@ def configure_pyqt(): Doing this means we can't use the interactive shell anymore (which we don't anyways), but we can use pdb instead. """ - from PyQt5 import QtCore + from qutebrowser.qt import QtCore, sip + QtCore.pyqtRemoveInputHook() try: QtCore.pyqt5_enable_new_onexit_scheme(True) # type: ignore[attr-defined] @@ -256,7 +272,6 @@ def configure_pyqt(): # Added in PyQt 5.13 somewhere, going to be the default in 5.14 pass - from qutebrowser.qt import sip sip.enableoverflowchecking(True) diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 6f6b00a88..18a6d7e27 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -52,7 +52,7 @@ from qutebrowser.utils import log, utils, standarddir, usertypes, message, resou from qutebrowser.misc import objects, earlyinit, sql, httpclient, pastebin, elf from qutebrowser.browser import pdfjs from qutebrowser.config import config -from qutebrowser.qt import QtGui, QtCore +from qutebrowser.qt import QtGui, QtCore, pyqt if TYPE_CHECKING: from qutebrowser.config import websettings @@ -398,9 +398,9 @@ MODULE_INFO: Mapping[str, ModuleInfo] = collections.OrderedDict([ ('pygments', ['__version__']), ('yaml', ['__version__']), ('adblock', ['__version__'], "0.3.2"), - ('PyQt5.QtWebEngineWidgets', []), - ('PyQt5.QtWebEngine', ['PYQT_WEBENGINE_VERSION_STR']), - ('PyQt5.QtWebKitWidgets', []), + (f'{pyqt.__name__}.QtWebEngineWidgets', []), + (f'{pyqt.__name__}.QtWebEngine', ['PYQT_WEBENGINE_VERSION_STR']), + (f'{pyqt.__name__}.QtWebKitWidgets', []), ] ]) -- cgit v1.2.3-54-g00ecf