Skip to content

Commit d0e66ef

Browse files
authored
gh-146369: Ensure PYTHON_LAZY_IMPORTS=none overrides __lazy_modules__ (#146371)
1 parent 2be147e commit d0e66ef

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

Lib/test/test_lazy_import/__init__.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,49 @@ def test_env_var_lazy_imports_none_disables_all_lazy(self):
10881088
self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}")
10891089
self.assertIn("EAGER", result.stdout)
10901090

1091+
def test_cli_lazy_imports_none_disables_dunder_lazy_modules(self):
1092+
"""-X lazy_imports=none should override __lazy_modules__."""
1093+
code = textwrap.dedent("""
1094+
import sys
1095+
__lazy_modules__ = ["json"]
1096+
import json
1097+
if 'json' in sys.modules:
1098+
print("EAGER")
1099+
else:
1100+
print("LAZY")
1101+
""")
1102+
result = subprocess.run(
1103+
[sys.executable, "-X", "lazy_imports=none", "-c", code],
1104+
capture_output=True,
1105+
text=True,
1106+
)
1107+
self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}")
1108+
self.assertIn("EAGER", result.stdout)
1109+
1110+
def test_env_var_lazy_imports_none_disables_dunder_lazy_modules(self):
1111+
"""PYTHON_LAZY_IMPORTS=none should override __lazy_modules__."""
1112+
code = textwrap.dedent("""
1113+
import sys
1114+
__lazy_modules__ = ["json"]
1115+
import json
1116+
if 'json' in sys.modules:
1117+
print("EAGER")
1118+
else:
1119+
print("LAZY")
1120+
""")
1121+
import os
1122+
1123+
env = os.environ.copy()
1124+
env["PYTHON_LAZY_IMPORTS"] = "none"
1125+
result = subprocess.run(
1126+
[sys.executable, "-c", code],
1127+
capture_output=True,
1128+
text=True,
1129+
env=env,
1130+
)
1131+
self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}")
1132+
self.assertIn("EAGER", result.stdout)
1133+
10911134
def test_cli_overrides_env_var(self):
10921135
"""Command-line option should take precedence over environment variable."""
10931136
# PEP 810: -X lazy_imports takes precedence over PYTHON_LAZY_IMPORTS
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Ensure ``-X lazy_imports=none``` and ``PYTHON_LAZY_IMPORTS=none``` override
2+
``__lazy_modules__``. Patch by Hugo van Kemenade.

Python/ceval.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3086,7 +3086,7 @@ _PyEval_LazyImportName(PyThreadState *tstate, PyObject *builtins,
30863086
break;
30873087
}
30883088

3089-
if (!lazy) {
3089+
if (!lazy && PyImport_GetLazyImportsMode() != PyImport_LAZY_NONE) {
30903090
// See if __lazy_modules__ forces this to be lazy.
30913091
lazy = check_lazy_import_compatibility(tstate, globals, name, level);
30923092
if (lazy < 0) {

0 commit comments

Comments
 (0)