]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-109653: Improve the import time of `email.utils` (#109824)
authorAlex Waygood <Alex.Waygood@Gmail.com>
Thu, 12 Oct 2023 22:03:20 +0000 (00:03 +0200)
committerGitHub <noreply@github.com>
Thu, 12 Oct 2023 22:03:20 +0000 (15:03 -0700)
Lib/email/utils.py
Misc/NEWS.d/next/Library/2023-09-25-10-47-22.gh-issue-109653.TUHrId.rst [new file with mode: 0644]

index 81da5394ea169521d2c525f01480b1bf43b73c18..a49a8fa986ce0cfa69b4ee01cb63de232476afbf 100644 (file)
@@ -25,8 +25,6 @@ __all__ = [
 import os
 import re
 import time
-import random
-import socket
 import datetime
 import urllib.parse
 
@@ -36,9 +34,6 @@ from email._parseaddr import mktime_tz
 
 from email._parseaddr import parsedate, parsedate_tz, _parsedate_tz
 
-# Intrapackage imports
-from email.charset import Charset
-
 COMMASPACE = ', '
 EMPTYSTRING = ''
 UEMPTYSTRING = ''
@@ -94,6 +89,8 @@ def formataddr(pair, charset='utf-8'):
             name.encode('ascii')
         except UnicodeEncodeError:
             if isinstance(charset, str):
+                # lazy import to improve module import time
+                from email.charset import Charset
                 charset = Charset(charset)
             encoded_name = charset.header_encode(name)
             return "%s <%s>" % (encoded_name, address)
@@ -181,6 +178,11 @@ def make_msgid(idstring=None, domain=None):
     portion of the message id after the '@'.  It defaults to the locally
     defined hostname.
     """
+    # Lazy imports to speedup module import time
+    # (no other functions in email.utils need these modules)
+    import random
+    import socket
+
     timeval = int(time.time()*100)
     pid = os.getpid()
     randint = random.getrandbits(64)
diff --git a/Misc/NEWS.d/next/Library/2023-09-25-10-47-22.gh-issue-109653.TUHrId.rst b/Misc/NEWS.d/next/Library/2023-09-25-10-47-22.gh-issue-109653.TUHrId.rst
new file mode 100644 (file)
index 0000000..b61f0bd
--- /dev/null
@@ -0,0 +1,4 @@
+Reduce the import time of :mod:`email.utils` by around 43%. This results in
+the import time of :mod:`email.message` falling by around 18%, which in turn
+reduces the import time of :mod:`importlib.metadata` by around 6%. Patch by
+Alex Waygood.