@@ -443,25 +443,9 @@ def check_min_version(module, min_version):
443
443
module = indicator ._module
444
444
else :
445
445
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
459
446
460
447
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 )
465
449
466
450
467
451
#
@@ -993,6 +977,12 @@ def _finalize_pympler(module, available):
993
977
import pympler .muppy
994
978
995
979
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
+
996
986
def _finalize_matplotlib (module , available ):
997
987
if not available :
998
988
return
@@ -1094,6 +1084,10 @@ def _pyutilib_importer():
1094
1084
)
1095
1085
random , _ = attempt_import ('random' )
1096
1086
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
+ )
1097
1091
# Commonly-used optional dependencies
1098
1092
dill , dill_available = attempt_import ('dill' )
1099
1093
mpi4py , mpi4py_available = attempt_import (
0 commit comments