From f14ffb128d4bf9016ba4e0d4eb7afd002c9a4a5b Mon Sep 17 00:00:00 2001 From: Jonas Camillus Jeppesen Date: Sat, 25 May 2019 00:42:02 +0200 Subject: [PATCH 1/3] Show helpful error message if kiwisolver fails import with 'ImportError: DLL load failed' --- lib/matplotlib/__init__.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 8ef01d7421c8..6ba8be7210d0 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -192,7 +192,17 @@ def _check_versions(): ("numpy", "1.11"), ("pyparsing", "2.0.1"), ]: - module = importlib.import_module(modname) + try: + module = importlib.import_module(modname) + except ImportError as error: + if sys.platform == 'win32' and 'DLL' in error.msg: + msg = ('You may be missing MIcrosoft Visual C++ ' + 'redistributable matching your Python version. ' + 'Consult Kiwisolver documentation for more details') + raise ImportError(msg) from error + else: + raise + if LooseVersion(module.__version__) < minver: raise ImportError("Matplotlib requires {}>={}; you have {}" .format(modname, minver, module.__version__)) From 3b801f39ea2d72d000498707a5b1ce138a47d3df Mon Sep 17 00:00:00 2001 From: Jonas Camillus Jeppesen Date: Tue, 28 May 2019 22:06:22 +0200 Subject: [PATCH 2/3] Revert "Show helpful error message if kiwisolver fails import with 'ImportError: DLL load failed'" This reverts commit f14ffb128d4bf9016ba4e0d4eb7afd002c9a4a5b. --- lib/matplotlib/__init__.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 6ba8be7210d0..8ef01d7421c8 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -192,17 +192,7 @@ def _check_versions(): ("numpy", "1.11"), ("pyparsing", "2.0.1"), ]: - try: - module = importlib.import_module(modname) - except ImportError as error: - if sys.platform == 'win32' and 'DLL' in error.msg: - msg = ('You may be missing MIcrosoft Visual C++ ' - 'redistributable matching your Python version. ' - 'Consult Kiwisolver documentation for more details') - raise ImportError(msg) from error - else: - raise - + module = importlib.import_module(modname) if LooseVersion(module.__version__) < minver: raise ImportError("Matplotlib requires {}>={}; you have {}" .format(modname, minver, module.__version__)) From 1929dd13e4b62a72018f5c0e6fb0b2ad4c677508 Mon Sep 17 00:00:00 2001 From: Jonas Camillus Jeppesen Date: Tue, 28 May 2019 22:14:18 +0200 Subject: [PATCH 3/3] Quickfix to load MS VC++ redist DLLs before importing kiwisolver which otherwise fails with 'ImportError: DLL load failed' --- lib/matplotlib/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 8ef01d7421c8..df5a244d1b99 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -185,6 +185,11 @@ def compare_versions(a, b): def _check_versions(): + + # Quickfix to ensure Microsoft Visual C++ redistributable + # DLLs are loaded before importing kiwisolver + from . import ft2font + for modname, minver in [ ("cycler", "0.10"), ("dateutil", "2.1"),