https://github.com/python/cpython/commit/1941319efb6fa4184b7fa14a8638a870530ffe20
commit: 1941319efb6fa4184b7fa14a8638a870530ffe20
branch: main
author: Lazizbek Ergashev <[email protected]>
committer: sobolevn <[email protected]>
date: 2026-11-04T16:57:42+03:00
summary:
gh-161229: Accept `None` for `globals` and `locals` in `__lazy_import__()`
(#161231)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-11-03-05-52-49.gh-issue-161229.8pOPOI.rst
M Lib/test/test_lazy_import/__init__.py
M Python/bltinmodule.c
diff --git a/Lib/test/test_lazy_import/__init__.py
b/Lib/test/test_lazy_import/__init__.py
index fd74ce6827fcca1..6dd2f7c825e5dd3 100644
--- a/Lib/test/test_lazy_import/__init__.py
+++ b/Lib/test/test_lazy_import/__init__.py
@@ -770,6 +770,20 @@ def test_dunder_lazy_import_invalid_arguments(self):
b"TypeError: Item in ``from list'' must be str, not int",
result.err)
+ @support.requires_subprocess()
+ def test_dunder_lazy_import_explicit_none(self):
+ """__lazy_import__ should accept None for globals and locals."""
+ code = textwrap.dedent("""
+ import sys
+ import types
+
+ lazy = __lazy_import__("test.test_lazy_import.data.basic2",
+ globals=None, locals=None)
+ assert type(globals()["lazy"]) is types.LazyImportType
+ assert "test.test_lazy_import.data.basic2" not in sys.modules
+ """)
+ assert_python_ok("-c", code)
+
def test_dunder_lazy_import_builtins(self):
"""__lazy_import__ should use module's __builtins__ for __import__."""
from test.test_lazy_import.data import dunder_lazy_import_builtins
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2026-11-03-05-52-49.gh-issue-161229.8pOPOI.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2026-11-03-05-52-49.gh-issue-161229.8pOPOI.rst
new file mode 100644
index 000000000000000..3a9eae1e4af91ba
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-11-03-05-52-49.gh-issue-161229.8pOPOI.rst
@@ -0,0 +1,2 @@
+:func:`!__lazy_import__` now treats ``None`` for *globals* and *locals* the
+same as omitting them, matching its signature.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index e58c37d1d07ac7d..c8e58f77d1d375f 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -312,7 +312,7 @@ builtin___lazy_import___impl(PyObject *module, PyObject
*name,
{
PyObject *builtins;
PyThreadState *tstate = PyThreadState_GET();
- if (globals == NULL) {
+ if (globals == NULL || globals == Py_None) {
globals = PyEval_GetGlobals();
if (globals == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -321,7 +321,7 @@ builtin___lazy_import___impl(PyObject *module, PyObject
*name,
return NULL;
}
}
- if (locals == NULL) {
+ if (locals == NULL || locals == Py_None) {
locals = globals;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]