From: Victor Stinner Date: Wed, 17 Jun 2020 17:11:50 +0000 (+0200) Subject: bpo-41006: pkgutil imports lazily re (GH-20939) X-Git-Tag: v3.10.0a1~596 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=98ce7b107e6611d04dc35a4f5b02ea215ef122cf;p=thirdparty%2FPython%2Fcpython.git bpo-41006: pkgutil imports lazily re (GH-20939) The pkgutil module now imports lazily the re module to speedup Python startup time. --- diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 4c184678a291..3d7f19f39981 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}')