From eb684431b8e6903a554148238558d8de20bd8800 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Mon, 4 Jan 2021 12:08:16 +0100 Subject: [PATCH] Don't import pkg_resources unless we need to parse dev version numbers. pkg_resources can be very slow to import, although this depends on the details of the python setup. On my machine, this PR speeds up `import sklearn` (with no dev versions of anything other than sklearn installed) by ~33%, from ~550ms to ~360ms. --- sklearn/utils/fixes.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/sklearn/utils/fixes.py b/sklearn/utils/fixes.py index 593e0eb332a99..b9373481b2b26 100644 --- a/sklearn/utils/fixes.py +++ b/sklearn/utils/fixes.py @@ -24,11 +24,18 @@ from .deprecation import deprecated -try: - from pkg_resources import parse_version # type: ignore -except ImportError: - # setuptools not installed - parse_version = LooseVersion # type: ignore + +def parse_version(v): + if not set(v).issubset("0123456789."): + # Avoid importing pkg_resources (which is slow) unless we need to parse + # dev version numbers. + try: + import pkg_resources + except ImportError: # setuptools not installed. + pass + else: + return pkg_resources.parse_version(v) + return LooseVersion(v) np_version = parse_version(np.__version__)