After seeing #149318, I was curious as to what the effect would be when run with -X lazy_imports=none. To my surprise, I noticed that very little seems to work under the setting already.
For example, trying to run the test suite fails:
$ ./python -Xlazy_imports=none -m test
Exception ignored in the internal traceback machinery:
Traceback (most recent call last):
File "/home/peter/develop/cpython/Lib/traceback.py", line 15, in <module>
import tokenize
File "/home/peter/develop/cpython/Lib/tokenize.py", line 38, in <module>
lazy import _colorize
File "/home/peter/develop/cpython/Lib/_colorize.py", line 6, in <module>
from dataclasses import dataclass, field, Field
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 5, in <module>
import annotationlib
File "/home/peter/develop/cpython/Lib/annotationlib.py", line 3, in <module>
import ast
File "/home/peter/develop/cpython/Lib/ast.py", line 24, in <module>
lazy from _colorize import can_colorize, get_theme
ImportError: cannot import name 'can_colorize' from partially initialized module '_colorize' (most likely due to a circular import) (/home/peter/develop/cpython/Lib/_colorize.py)
Traceback (most recent call last):
File "/home/peter/develop/cpython/Lib/runpy.py", line 201, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/home/peter/develop/cpython/Lib/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/peter/develop/cpython/Lib/test/__main__.py", line 1, in <module>
from test.libregrtest.main import main
File "/home/peter/develop/cpython/Lib/test/libregrtest/main.py", line 8, in <module>
import trace
File "/home/peter/develop/cpython/Lib/trace.py", line 56, in <module>
import tokenize
File "/home/peter/develop/cpython/Lib/tokenize.py", line 38, in <module>
lazy import _colorize
File "/home/peter/develop/cpython/Lib/_colorize.py", line 6, in <module>
from dataclasses import dataclass, field, Field
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 5, in <module>
import annotationlib
File "/home/peter/develop/cpython/Lib/annotationlib.py", line 3, in <module>
import ast
File "/home/peter/develop/cpython/Lib/ast.py", line 24, in <module>
lazy from _colorize import can_colorize, get_theme
ImportError: cannot import name 'can_colorize' from partially initialized module '_colorize' (most likely due to a circular import) (/home/peter/develop/cpython/Lib/_colorize.py)
The new REPL doesn't work:
$ ./python -X lazy_imports=none
Python 3.15.0a8+ (heads/pr_149318:6a88c2deeb3, May 3 2026, 10:35:20) [GCC 15.2.1 20260209] on linux
Type "help", "copyright", "credits" or "license" for more information.
Failed calling sys.__interactivehook__
Exception ignored in the internal traceback machinery:
Traceback (most recent call last):
File "/home/peter/develop/cpython/Lib/traceback.py", line 15, in <module>
import tokenize
File "/home/peter/develop/cpython/Lib/tokenize.py", line 38, in <module>
lazy import _colorize
File "/home/peter/develop/cpython/Lib/_colorize.py", line 170, in <module>
@dataclass(frozen=True, kw_only=True)
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 1456, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 1064, in _process_class
cls_annotations = annotationlib.get_annotations(
AttributeError: module 'annotationlib' has no attribute 'get_annotations'
Traceback (most recent call last):
File "/home/peter/develop/cpython/Lib/site.py", line 513, in register_readline
import rlcompleter # noqa: F401
File "/home/peter/develop/cpython/Lib/rlcompleter.py", line 34, in <module>
import inspect
File "/home/peter/develop/cpython/Lib/inspect.py", line 146, in <module>
from annotationlib import Format, ForwardRef
File "/home/peter/develop/cpython/Lib/annotationlib.py", line 3, in <module>
import ast
File "/home/peter/develop/cpython/Lib/ast.py", line 24, in <module>
lazy from _colorize import can_colorize, get_theme
File "/home/peter/develop/cpython/Lib/_colorize.py", line 170, in <module>
@dataclass(frozen=True, kw_only=True)
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 1456, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
File "/home/peter/develop/cpython/Lib/dataclasses.py", line 1064, in _process_class
cls_annotations = annotationlib.get_annotations(
AttributeError: module 'annotationlib' has no attribute 'get_annotations'
warning: can't use pyrepl: module 'annotationlib' has no attribute 'get_annotations'
>>>
I compiled a list of all the standard library modules that currently don't work under -X lazy_imports=none:
mailbox
logging
bdb
pdb
ast
tokenize
turtle
ensurepip
inspect
unittest
py_compile
tabnanny
code
asyncio
traceback
antigravity
contextlib
doctest
pathlib
pstats
compileall
zipfile
getpass
zipapp
pydoc
webbrowser
configparser
subprocess
venv
rlcompleter
pyclbr
difflib
trace
annotationlib
imaplib
pickletools
glob
I've already raised my concerns about this on DPO (in fact, LWN wrote an entire article about this), but anyway, what do we do? Do we consider this a bug? If so, how do we test for it? If not, then what is supposed to work? We should document the restrictions and expected behavior for disabling lazy imports.
Linked PRs
After seeing #149318, I was curious as to what the effect would be when run with
-X lazy_imports=none. To my surprise, I noticed that very little seems to work under the setting already.For example, trying to run the test suite fails:
The new REPL doesn't work:
I compiled a list of all the standard library modules that currently don't work under
-X lazy_imports=none:mailboxloggingbdbpdbasttokenizeturtleensurepipinspectunittestpy_compiletabnannycodeasynciotracebackantigravitycontextlibdoctestpathlibpstatscompileallzipfilegetpasszipapppydocwebbrowserconfigparsersubprocessvenvrlcompleterpyclbrdifflibtraceannotationlibimaplibpickletoolsglobI've already raised my concerns about this on DPO (in fact, LWN wrote an entire article about this), but anyway, what do we do? Do we consider this a bug? If so, how do we test for it? If not, then what is supposed to work? We should document the restrictions and expected behavior for disabling lazy imports.
Linked PRs