Issue #19205: Don't import the 're' module in site and sysconfig module to
to speed up interpreter start.
diff --git a/Lib/site.py b/Lib/site.py
index 4ac2860..d60f15b 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -70,7 +70,6 @@
 
 import sys
 import os
-import re
 import builtins
 import _sitebuiltins
 
@@ -436,8 +435,7 @@
                 encodings._cache[enc] = encodings._unknown
                 encodings.aliases.aliases[enc] = 'mbcs'
 
-
-CONFIG_LINE = re.compile(r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$')
+CONFIG_LINE = r'^(?P<key>(\w|[-_])+)\s*=\s*(?P<value>.*)\s*$'
 
 def venv(known_paths):
     global PREFIXES, ENABLE_USER_SITE
@@ -460,6 +458,8 @@
         ]
 
     if candidate_confs:
+        import re
+        config_line = re.compile(CONFIG_LINE)
         virtual_conf = candidate_confs[0]
         system_site = "true"
         with open(virtual_conf) as f:
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index ee38a20..efc9a84 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -1,7 +1,6 @@
 """Access to Python's configuration information."""
 
 import os
-import re
 import sys
 from os.path import pardir, realpath
 
@@ -222,6 +221,7 @@
     """
     # Regexes needed for parsing Makefile (and similar syntaxes,
     # like old-style Setup files).
+    import re
     _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_]*)\)")
     _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
@@ -435,6 +435,7 @@
     """
     if vars is None:
         vars = {}
+    import re
     define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
     undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
 
@@ -658,6 +659,7 @@
         return "%s-%s.%s" % (osname, version, release)
     elif osname[:6] == "cygwin":
         osname = "cygwin"
+        import re
         rel_re = re.compile(r'[\d.]+')
         m = rel_re.match(release)
         if m:
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 575d65b..41fa7b1 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -420,5 +420,20 @@
         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__":
     unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
index 18df7bd..c520bbe 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,9 @@
 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
   _io module instead of the full locale module.