| import re | |
| from importlib_metadata import PackageNotFoundError, distribution | |
| from mmengine.utils import digit_version | |
| def satisfy_requirement(dep): | |
| pat = '(' + '|'.join(['>=', '==', '>']) + ')' | |
| parts = re.split(pat, dep, maxsplit=1) | |
| parts = [p.strip() for p in parts] | |
| package = parts[0] | |
| if len(parts) > 1: | |
| op, version = parts[1:] | |
| op = { | |
| '>=': '__ge__', | |
| '==': '__eq__', | |
| '>': '__gt__', | |
| '<': '__lt__', | |
| '<=': '__le__' | |
| }[op] | |
| else: | |
| op, version = None, None | |
| try: | |
| dist = distribution(package) | |
| if op is None or getattr(digit_version(dist.version), op)( | |
| digit_version(version)): | |
| return True | |
| except PackageNotFoundError: | |
| pass | |
| return False | |