@@ -194,27 +194,15 @@ def myfunc():
194194 if not have_module :
195195 not_found_message = f"No module named '{ fullname } '"
196196 elif require is not None :
197- import packaging .requirements
198-
199- try :
200- import importlib_metadata
201- except ImportError :
202- import importlib .metadata as importlib_metadata
203-
204- req = packaging .requirements .Requirement (require )
205197 try :
206- have_module = req .specifier .contains (
207- importlib_metadata .version (req .name ),
208- prereleases = True ,
209- )
210- except importlib_metadata .PackageNotFoundError as e :
198+ have_module = _check_requirement (require )
199+ except ModuleNotFoundError as e :
211200 raise ValueError (
212201 f"Found module '{ fullname } ' but cannot test requirement '{ require } '. "
213202 "Requirements must match distribution name, not module name."
214203 ) from e
215204
216- if not have_module :
217- not_found_message = f"No distribution can be found matching '{ require } '"
205+ not_found_message = f"No distribution can be found matching '{ require } '"
218206
219207 if not have_module :
220208 if error_on_import :
@@ -247,6 +235,37 @@ def myfunc():
247235 return module
248236
249237
238+ def _check_requirement (require : str ) -> bool :
239+ """Verify that a package requirement is satisfied
240+
241+ If the package is required, a ``ModuleNotFoundError`` is raised
242+ by ``importlib.metadata``.
243+
244+ Parameters
245+ ----------
246+ require : str
247+ A dependency requirement as defined in PEP-508
248+
249+ Returns
250+ -------
251+ satisfied : bool
252+ True if the installed version of the dependency matches
253+ the specified version, False otherwise.
254+ """
255+ import packaging .requirements
256+
257+ try :
258+ import importlib .metadata as importlib_metadata
259+ except ImportError : # PY37
260+ import importlib_metadata
261+
262+ req = packaging .requirements .Requirement (require )
263+ return req .specifier .contains (
264+ importlib_metadata .version (req .name ),
265+ prereleases = True ,
266+ )
267+
268+
250269def have_module (module_like : types .ModuleType ) -> bool :
251270 return not isinstance (module_like , DelayedImportErrorModule )
252271
0 commit comments