@@ -443,25 +443,9 @@ def check_min_version(module, min_version):
443443 module = indicator ._module
444444 else :
445445 return False
446- if check_min_version ._parser is None :
447- try :
448- from packaging import version as _version
449-
450- _parser = _version .parse
451- except ImportError :
452- # pkg_resources is an order of magnitude slower to import than
453- # packaging. Only use it if the preferred (but optional)
454- # packaging library is not present
455- from pkg_resources import parse_version as _parser
456- check_min_version ._parser = _parser
457- else :
458- _parser = check_min_version ._parser
459446
460447 version = getattr (module , '__version__' , '0.0.0' )
461- return _parser (min_version ) <= _parser (version )
462-
463-
464- check_min_version ._parser = None
448+ return packaging .version .parse (min_version ) <= packaging .version .parse (version )
465449
466450
467451#
@@ -993,6 +977,12 @@ def _finalize_pympler(module, available):
993977 import pympler .muppy
994978
995979
980+ def _finalize_packaging (module , available ):
981+ if available :
982+ # Import key subpackages that we will want to assume are present
983+ import packaging .version
984+
985+
996986def _finalize_matplotlib (module , available ):
997987 if not available :
998988 return
@@ -1094,6 +1084,10 @@ def _pyutilib_importer():
10941084 )
10951085 random , _ = attempt_import ('random' )
10961086
1087+ # Necessary for minimum version checking for other optional dependencies
1088+ packaging , packaging_available = attempt_import (
1089+ 'packaging' , deferred_submodules = ['version' ], callback = _finalize_packaging
1090+ )
10971091 # Commonly-used optional dependencies
10981092 dill , dill_available = attempt_import ('dill' )
10991093 mpi4py , mpi4py_available = attempt_import (
0 commit comments