diff --git a/lib/matplotlib/backends/qt_compat.py b/lib/matplotlib/backends/qt_compat.py index 3c0f2b74c84a..e2c6e1f44215 100644 --- a/lib/matplotlib/backends/qt_compat.py +++ b/lib/matplotlib/backends/qt_compat.py @@ -42,13 +42,15 @@ QT_API = QT_API_PYSIDE # Otherwise, check the QT_API environment variable (from Enthought). This can # only override the binding, not the backend (in other words, we check that the -# requested backend actually matches). -elif mpl.rcParams["backend"] in ["Qt5Agg", "Qt5Cairo"]: +# requested backend actually matches). Use dict.__getitem__ to avoid +# triggering backend resolution (which can result in a partially but +# incompletely imported backend_qt5). +elif dict.__getitem__(mpl.rcParams, "backend") in ["Qt5Agg", "Qt5Cairo"]: if QT_API_ENV in ["pyqt5", "pyside2"]: QT_API = _ETS[QT_API_ENV] else: QT_API = None -elif mpl.rcParams["backend"] in ["Qt4Agg", "Qt4Cairo"]: +elif dict.__getitem__(mpl.rcParams, "backend") in ["Qt4Agg", "Qt4Cairo"]: if QT_API_ENV in ["pyqt4", "pyside"]: QT_API = _ETS[QT_API_ENV] else: @@ -150,8 +152,8 @@ def is_pyqt5(): _setup_pyqt5() elif QT_API in [QT_API_PYQTv2, QT_API_PYSIDE, QT_API_PYQT]: _setup_pyqt4() -elif QT_API is None: - if mpl.rcParams["backend"] == "Qt4Agg": +elif QT_API is None: # See above re: dict.__getitem__. + if dict.__getitem__(mpl.rcParams, "backend") == "Qt4Agg": _candidates = [(_setup_pyqt4, QT_API_PYQTv2), (_setup_pyqt4, QT_API_PYSIDE), (_setup_pyqt4, QT_API_PYQT),