diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 4c184678a29..3d7f19f3998 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -7,7 +7,6 @@ import importlib.util import importlib.machinery import os import os.path -import re import sys from types import ModuleType import warnings @@ -638,9 +637,7 @@ def get_data(package, resource): return loader.get_data(resource_name) -_DOTTED_WORDS = r'(?!\d)(\w+)(\.(?!\d)(\w+))*' -_NAME_PATTERN = re.compile(f'^(?P{_DOTTED_WORDS})(?P:(?P{_DOTTED_WORDS})?)?$', re.U) -del _DOTTED_WORDS +_NAME_PATTERN = None def resolve_name(name): """ @@ -674,6 +671,15 @@ def resolve_name(name): AttributeError - if a failure occurred when traversing the object hierarchy within the imported package to get to the desired object) """ + global _NAME_PATTERN + if _NAME_PATTERN is None: + # Lazy import to speedup Python startup time + import re + dotted_words = r'(?!\d)(\w+)(\.(?!\d)(\w+))*' + _NAME_PATTERN = re.compile(f'^(?P{dotted_words})' + f'(?P:(?P{dotted_words})?)?$', + re.UNICODE) + m = _NAME_PATTERN.match(name) if not m: raise ValueError(f'invalid format: {name!r}')