gh-67224: Make linecache imports relative to improve startup speed (#117501)
diff --git a/Lib/linecache.py b/Lib/linecache.py index b97999f..d1113b1 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py
@@ -5,9 +5,6 @@ that name. """ -import sys -import os - __all__ = ["getline", "clearcache", "checkcache", "lazycache"] @@ -67,6 +64,11 @@ def checkcache(filename=None): 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: cache.pop(filename, None) @@ -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."""