bpo-41006: pkgutil imports lazily re (GH-20939)

The pkgutil module now imports lazily the re module to speedup Python
startup time.
This commit is contained in:
Victor Stinner 2020-06-17 19:11:50 +02:00 committed by GitHub
parent 7824cc05bf
commit 98ce7b107e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 4 deletions

View File

@ -7,7 +7,6 @@ import importlib.util
import importlib.machinery import importlib.machinery
import os import os
import os.path import os.path
import re
import sys import sys
from types import ModuleType from types import ModuleType
import warnings import warnings
@ -638,9 +637,7 @@ def get_data(package, resource):
return loader.get_data(resource_name) return loader.get_data(resource_name)
_DOTTED_WORDS = r'(?!\d)(\w+)(\.(?!\d)(\w+))*' _NAME_PATTERN = None
_NAME_PATTERN = re.compile(f'^(?P<pkg>{_DOTTED_WORDS})(?P<cln>:(?P<obj>{_DOTTED_WORDS})?)?$', re.U)
del _DOTTED_WORDS
def resolve_name(name): def resolve_name(name):
""" """
@ -674,6 +671,15 @@ def resolve_name(name):
AttributeError - if a failure occurred when traversing the object hierarchy AttributeError - if a failure occurred when traversing the object hierarchy
within the imported package to get to the desired object) 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<pkg>{dotted_words})'
f'(?P<cln>:(?P<obj>{dotted_words})?)?$',
re.UNICODE)
m = _NAME_PATTERN.match(name) m = _NAME_PATTERN.match(name)
if not m: if not m:
raise ValueError(f'invalid format: {name!r}') raise ValueError(f'invalid format: {name!r}')