From 689ada79150f28b0053fa6c1fb646b75ab2cc200 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Wed, 10 Apr 2024 20:09:25 +0100 Subject: [PATCH] gh-67224: Make linecache imports relative to improve startup speed (#117501) --- Lib/linecache.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/linecache.py b/Lib/linecache.py index b97999fc1dc909..d1113b108dc5e4 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -5,9 +5,6 @@ that name. """ -import sys -import os - __all__ = ["getline", "clearcache", "checkcache", "lazycache"] @@ -66,6 +63,11 @@ def checkcache(filename=None): size, mtime, lines, fullname = entry if mtime is None: continue # no-op for files loaded via a __loader__ + try: + # This import can fail if the interpreter is shutting down + import os + except ImportError: + return try: stat = os.stat(fullname) except OSError: @@ -76,6 +78,12 @@ def checkcache(filename=None): def updatecache(filename, module_globals=None): + # These imports are not at top level because linecache is in the critical + # path of the interpreter startup and importing os and sys take a lot of time + # and slow down the startup sequence. + import os + import sys + """Update a cache entry and return its list of lines. If something's wrong, print a message, discard the cache entry, and return an empty list."""