Kaydet (Commit) 8c9cd5a3 authored tarafından Christian Heimes's avatar Christian Heimes

Issue #19205: Don't import the 're' module in site and sysconfig module to

to speed up interpreter start.
üst fd4722ca
...@@ -70,7 +70,6 @@ ImportError exception, it is silently ignored. ...@@ -70,7 +70,6 @@ ImportError exception, it is silently ignored.
import sys import sys
import os import os
import re
import builtins import builtins
import _sitebuiltins import _sitebuiltins
...@@ -436,8 +435,7 @@ def aliasmbcs(): ...@@ -436,8 +435,7 @@ def aliasmbcs():
encodings._cache[enc] = encodings._unknown encodings._cache[enc] = encodings._unknown
encodings.aliases.aliases[enc] = 'mbcs' encodings.aliases.aliases[enc] = 'mbcs'
CONFIG_LINE = r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$'
CONFIG_LINE = re.compile(r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$')
def venv(known_paths): def venv(known_paths):
global PREFIXES, ENABLE_USER_SITE global PREFIXES, ENABLE_USER_SITE
...@@ -460,6 +458,8 @@ def venv(known_paths): ...@@ -460,6 +458,8 @@ def venv(known_paths):
] ]
if candidate_confs: if candidate_confs:
import re
config_line = re.compile(CONFIG_LINE)
virtual_conf = candidate_confs[0] virtual_conf = candidate_confs[0]
system_site = "true" system_site = "true"
with open(virtual_conf) as f: with open(virtual_conf) as f:
......
"""Access to Python's configuration information.""" """Access to Python's configuration information."""
import os import os
import re
import sys import sys
from os.path import pardir, realpath from os.path import pardir, realpath
...@@ -222,6 +221,7 @@ def _parse_makefile(filename, vars=None): ...@@ -222,6 +221,7 @@ def _parse_makefile(filename, vars=None):
""" """
# Regexes needed for parsing Makefile (and similar syntaxes, # Regexes needed for parsing Makefile (and similar syntaxes,
# like old-style Setup files). # like old-style Setup files).
import re
_variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
...@@ -435,6 +435,7 @@ def parse_config_h(fp, vars=None): ...@@ -435,6 +435,7 @@ def parse_config_h(fp, vars=None):
""" """
if vars is None: if vars is None:
vars = {} vars = {}
import re
define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
...@@ -658,6 +659,7 @@ def get_platform(): ...@@ -658,6 +659,7 @@ def get_platform():
return "%s-%s.%s" % (osname, version, release) return "%s-%s.%s" % (osname, version, release)
elif osname[:6] == "cygwin": elif osname[:6] == "cygwin":
osname = "cygwin" osname = "cygwin"
import re
rel_re = re.compile(r'[\d.]+') rel_re = re.compile(r'[\d.]+')
m = rel_re.match(release) m = rel_re.match(release)
if m: if m:
......
...@@ -420,5 +420,20 @@ class ImportSideEffectTests(unittest.TestCase): ...@@ -420,5 +420,20 @@ class ImportSideEffectTests(unittest.TestCase):
self.assertEqual(code, 200, msg="Can't find " + url) self.assertEqual(code, 200, msg="Can't find " + url)
class StartupImportTests(unittest.TestCase):
def test_startup_imports(self):
# This tests checks which modules are loaded by Python when it
# initially starts upon startup.
args = [sys.executable, '-I', '-c',
'import sys; print(set(sys.modules))']
stdout = subprocess.check_output(args)
modules = eval(stdout.decode('utf-8'))
self.assertIn('site', modules)
re_mods = {'re', '_sre', 'sre_compile', 'sre_constants', 'sre_parse'}
self.assertFalse(modules.intersection(re_mods))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
...@@ -36,6 +36,9 @@ Core and Builtins ...@@ -36,6 +36,9 @@ Core and Builtins
Library Library
------- -------
- Issue #19205: Don't import the 're' module in site and sysconfig module to
to speed up interpreter start.
- Issue #9548: Add a minimal "_bootlocale" module that is imported by the - Issue #9548: Add a minimal "_bootlocale" module that is imported by the
_io module instead of the full locale module. _io module instead of the full locale module.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment