gh-146369: Ensure `PYTHON_LAZY_IMPORTS=none` overrides `__lazy_module… · python/cpython@d0e66ef

GitHub

File tree

Lib/test/test_lazy_import

Misc/NEWS.d/next/Core_and_Builtins

Python

Original file line numberDiff line numberDiff line change@@ -1088,6 +1088,49 @@ def test_env_var_lazy_imports_none_disables_all_lazy(self):

10881088self.assertEqual(result.returncode, 0, f"stderr: {result.stderr}")

10891089self.assertIn("EAGER", result.stdout)

109010901091+deftest_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+deftest_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+importos

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+10911134deftest_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

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.

Original file line numberDiff line numberDiff line change@@ -3086,7 +3086,7 @@ _PyEval_LazyImportName(PyThreadState *tstate, PyObject *builtins,

30863086break;

30873087 }

308830883089-if (!lazy) {

3089+if (!lazy&&PyImport_GetLazyImportsMode() !=PyImport_LAZY_NONE) {

30903090// See if __lazy_modules__ forces this to be lazy.

30913091lazy=check_lazy_import_compatibility(tstate, globals, name, level);

30923092if (lazy<0) {