https://github.com/python/cpython/commit/8ca1e4d846e868a20834cf442c48a3648b558bbe
commit: 8ca1e4d846e868a20834cf442c48a3648b558bbe
branch: main
author: sobolevn <m...@sobolevn.me>
committer: sobolevn <m...@sobolevn.me>
date: 2025-06-21T10:56:14+03:00
summary:

gh-135645: Added `supports_isolated_interpreters` to `sys.implementation` 
(#135667)

Co-authored-by: Eric Snow <ericsnowcurren...@gmail.com>

files:
A Misc/NEWS.d/next/Library/2025-06-18-13-58-13.gh-issue-135645.109nff.rst
M Doc/library/sys.rst
M Lib/test/test_sys.py
M Python/sysmodule.c

diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index f8f727f4a23410..1626a89a0731bf 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -1185,6 +1185,15 @@ always available. Unless explicitly noted otherwise, all 
variables are read-only
    ``cache_tag`` is set to ``None``, it indicates that module caching should
    be disabled.
 
+   *supports_isolated_interpreters* is a boolean value, whether
+   this implementation supports multiple isolated interpreters.
+   It is ``True`` for CPython on most platforms.  Platforms with
+   this support implement the low-level :mod:`!_interpreters` module.
+
+   .. seealso::
+
+      :pep:`684`, :pep:`734`, and :mod:`concurrent.interpreters`.
+
    :data:`sys.implementation` may contain additional attributes specific to
    the Python implementation.  These non-standard attributes must start with
    an underscore, and are not described here.  Regardless of its contents,
@@ -1194,6 +1203,9 @@ always available. Unless explicitly noted otherwise, all 
variables are read-only
 
    .. versionadded:: 3.3
 
+   .. versionchanged:: 3.14
+      Added ``supports_isolated_interpreters`` field.
+
    .. note::
 
       The addition of new required attributes must go through the normal PEP
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 73a72024bba84d..27524d86355b9c 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -1074,6 +1074,7 @@ def test_implementation(self):
         self.assertHasAttr(sys.implementation, 'version')
         self.assertHasAttr(sys.implementation, 'hexversion')
         self.assertHasAttr(sys.implementation, 'cache_tag')
+        self.assertHasAttr(sys.implementation, 
'supports_isolated_interpreters')
 
         version = sys.implementation.version
         self.assertEqual(version[:2], (version.major, version.minor))
@@ -1087,6 +1088,15 @@ def test_implementation(self):
         self.assertEqual(sys.implementation.name,
                          sys.implementation.name.lower())
 
+        # https://peps.python.org/pep-0734
+        sii = sys.implementation.supports_isolated_interpreters
+        self.assertIsInstance(sii, bool)
+        if test.support.check_impl_detail(cpython=True):
+            if test.support.is_emscripten or test.support.is_wasi:
+                self.assertFalse(sii)
+            else:
+                self.assertTrue(sii)
+
     @test.support.cpython_only
     def test_debugmallocstats(self):
         # Test sys._debugmallocstats()
diff --git 
a/Misc/NEWS.d/next/Library/2025-06-18-13-58-13.gh-issue-135645.109nff.rst 
b/Misc/NEWS.d/next/Library/2025-06-18-13-58-13.gh-issue-135645.109nff.rst
new file mode 100644
index 00000000000000..a7764a0105b8b3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-06-18-13-58-13.gh-issue-135645.109nff.rst
@@ -0,0 +1,2 @@
+Added ``supports_isolated_interpreters`` field to
+:data:`sys.implementation`.
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index b3a2512a99d2fc..ae6cf306735939 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -3607,6 +3607,18 @@ make_impl_info(PyObject *version_info)
         goto error;
 #endif
 
+    // PEP-734
+#if defined(__wasi__) || defined(__EMSCRIPTEN__)
+    // It is not enabled on WASM builds just yet
+    value = Py_False;
+#else
+    value = Py_True;
+#endif
+    res = PyDict_SetItemString(impl_info, "supports_isolated_interpreters", 
value);
+    if (res < 0) {
+        goto error;
+    }
+
     /* dict ready */
 
     ns = _PyNamespace_New(impl_info);

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: arch...@mail-archive.com

Reply via email to