[Python-checkins] bpo-42955: Rename module_names to sys.stdlib_module_names (GH-24332)

vstinner webhook-mailer at python.org
Mon Jan 25 17:13:19 EST 2021


https://github.com/python/cpython/commit/9852cb38112a4f8d11e26c3423643ea994d5a14f
commit: 9852cb38112a4f8d11e26c3423643ea994d5a14f
branch: master
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2021-01-25T23:12:50+01:00
summary:

bpo-42955: Rename module_names to sys.stdlib_module_names (GH-24332)

* Rename _Py_module_names to _Py_stdlib_module_names.
* Rename Python/module_names.h to Python/stdlib_module_names.h.

files:
A Python/stdlib_module_names.h
A Tools/scripts/generate_stdlib_module_names.py
D Python/module_names.h
D Tools/scripts/generate_module_names.py
M .github/workflows/build.yml
M .travis.yml
M Doc/library/sys.rst
M Doc/whatsnew/3.10.rst
M Lib/test/test_capi.py
M Lib/test/test_faulthandler.py
M Lib/test/test_sys.py
M Makefile.pre.in
M Misc/NEWS.d/next/Library/2021-01-18-11-59-46.bpo-42955.CSWLC9.rst
M PCbuild/pythoncore.vcxproj
M PCbuild/pythoncore.vcxproj.filters
M Python/pylifecycle.c
M Python/sysmodule.c

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6a41b51824546..48b5825db042f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -63,7 +63,7 @@ jobs:
           # Build Python with the libpython dynamic library
           ./configure --with-pydebug --enable-shared
           make -j4 regen-all
-          make regen-module-names
+          make regen-stdlib-module-names
       - name: Check for changes
         run: |
           changes=$(git status --porcelain)
diff --git a/.travis.yml b/.travis.yml
index c908891b2e322..6a22d20455b42 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -172,7 +172,7 @@ before_script:
   - eval "$(pyenv init -)"
   - pyenv global 3.8
   - PYTHON_FOR_REGEN=python3.8 make -j4 regen-all
-  - make regen-module-names
+  - make regen-stdlib-module-names
   - changes=`git status --porcelain`
   - |
       # Check for changes in regenerated files
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index f187895410cd4..0219ae8ceb65f 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -157,7 +157,7 @@ always available.
    Python interpreter.  (This information is not available in any other way ---
    ``modules.keys()`` only lists the imported modules.)
 
-   See also the :attr:`sys.module_names` list.
+   See also the :attr:`sys.stdlib_module_names` list.
 
 
 .. function:: call_tracing(func, args)
@@ -1062,24 +1062,6 @@ always available.
         This is still called as a fallback if a :data:`meta_path` entry doesn't
         have a :meth:`~importlib.abc.MetaPathFinder.find_spec` method.
 
-.. data:: module_names
-
-   A frozenset of strings containing the names of standard library modules.
-
-   It is the same on all platforms. Modules which are not available on
-   some platforms and modules disabled at Python build are also listed.
-   All module kinds are listed: pure Python, built-in, frozen and extension
-   modules. Test modules are excluded.
-
-   For packages, only sub-packages are listed, not sub-modules. For example,
-   ``concurrent`` package and ``concurrent.futures`` sub-package are listed,
-   but not ``concurrent.futures.base`` sub-module.
-
-   See also the :attr:`sys.builtin_module_names` list.
-
-   .. versionadded:: 3.10
-
-
 .. data:: modules
 
    This is a dictionary that maps module names to modules which have already been
@@ -1584,6 +1566,24 @@ always available.
        to a console and Python apps started with :program:`pythonw`.
 
 
+.. data:: stdlib_module_names
+
+   A frozenset of strings containing the names of standard library modules.
+
+   It is the same on all platforms. Modules which are not available on
+   some platforms and modules disabled at Python build are also listed.
+   All module kinds are listed: pure Python, built-in, frozen and extension
+   modules. Test modules are excluded.
+
+   For packages, only sub-packages are listed, not sub-modules. For example,
+   ``concurrent`` package and ``concurrent.futures`` sub-package are listed,
+   but not ``concurrent.futures.base`` sub-module.
+
+   See also the :attr:`sys.builtin_module_names` list.
+
+   .. versionadded:: 3.10
+
+
 .. data:: thread_info
 
    A :term:`named tuple` holding information about the thread
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 3026a1ac0e542..30a82816444af 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -396,7 +396,7 @@ Add :data:`sys.orig_argv` attribute: the list of the original command line
 arguments passed to the Python executable.
 (Contributed by Victor Stinner in :issue:`23427`.)
 
-Add :data:`sys.module_names`, containing the list of the standard library
+Add :data:`sys.stdlib_module_names`, containing the list of the standard library
 module names.
 (Contributed by Victor Stinner in :issue:`42955`.)
 
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 5f5c0d038d9f3..8e92a50026c86 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -581,7 +581,7 @@ def test_fatal_error(self):
         not_expected = ('_testcapi',)
         code = textwrap.dedent('''
             import _testcapi, sys
-            sys.module_names = frozenset({"_testcapi"})
+            sys.stdlib_module_names = frozenset({"_testcapi"})
             _testcapi.fatal_error(b"MESSAGE")
         ''')
         self.check_fatal_error(code, expected)
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
index 02077a69bb4d8..648624482e555 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -336,7 +336,7 @@ def test_dump_ext_modules(self):
             import faulthandler
             import sys
             # Don't filter stdlib module names
-            sys.module_names = frozenset()
+            sys.stdlib_module_names = frozenset()
             faulthandler.enable()
             faulthandler._sigsegv()
             """
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 729b8667fc857..c4e053594800b 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -987,8 +987,8 @@ def test_orig_argv(self):
                          proc)
 
     def test_module_names(self):
-        self.assertIsInstance(sys.module_names, frozenset)
-        for name in sys.module_names:
+        self.assertIsInstance(sys.stdlib_module_names, frozenset)
+        for name in sys.stdlib_module_names:
             self.assertIsInstance(name, str)
 
 
diff --git a/Makefile.pre.in b/Makefile.pre.in
index ca6b5189c7564..0b22bdd5591b9 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -760,7 +760,7 @@ regen-all: regen-opcode regen-opcode-targets regen-typeslots \
 	regen-token regen-ast regen-keyword regen-importlib clinic \
 	regen-pegen-metaparser regen-pegen
 	@echo
-	@echo "Note: make regen-module-names and autoconf should be run manually"
+	@echo "Note: make regen-stdlib-module-names and autoconf should be run manually"
 
 ############################################################################
 # Special rules for object files
@@ -900,14 +900,14 @@ regen-keyword:
 		$(srcdir)/Lib/keyword.py.new
 	$(UPDATE_FILE) $(srcdir)/Lib/keyword.py $(srcdir)/Lib/keyword.py.new
 
-.PHONY: regen-module-names
-regen-module-names: build_all
-	# Regenerate Python/module_names.h
-	# using Tools/scripts/generate_module_names.py
+.PHONY: regen-stdlib-module-names
+regen-stdlib-module-names: build_all
+	# Regenerate Python/stdlib_module_names.h
+	# using Tools/scripts/generate_stdlib_module_names.py
 	$(RUNSHARED) ./$(BUILDPYTHON) \
-		$(srcdir)/Tools/scripts/generate_module_names.py \
-		> $(srcdir)/Python/module_names.h.new
-	$(UPDATE_FILE) $(srcdir)/Python/module_names.h $(srcdir)/Python/module_names.h.new
+		$(srcdir)/Tools/scripts/generate_stdlib_module_names.py \
+		> $(srcdir)/Python/stdlib_module_names.h.new
+	$(UPDATE_FILE) $(srcdir)/Python/stdlib_module_names.h $(srcdir)/Python/stdlib_module_names.h.new
 
 Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o Python/future.o: $(srcdir)/Include/Python-ast.h
 
@@ -1160,7 +1160,7 @@ PYTHON_HEADERS= \
 		$(srcdir)/Include/internal/pycore_warnings.h \
 		$(DTRACE_HEADERS) \
 		\
-		$(srcdir)/Python/module_names.h
+		$(srcdir)/Python/stdlib_module_names.h
 
 $(LIBRARY_OBJS) $(MODOBJS) Programs/python.o: $(PYTHON_HEADERS)
 
diff --git a/Misc/NEWS.d/next/Library/2021-01-18-11-59-46.bpo-42955.CSWLC9.rst b/Misc/NEWS.d/next/Library/2021-01-18-11-59-46.bpo-42955.CSWLC9.rst
index 0631acd7a9870..373b829b0fb76 100644
--- a/Misc/NEWS.d/next/Library/2021-01-18-11-59-46.bpo-42955.CSWLC9.rst
+++ b/Misc/NEWS.d/next/Library/2021-01-18-11-59-46.bpo-42955.CSWLC9.rst
@@ -1,2 +1,2 @@
-Add :data:`sys.module_names`, containing the list of the standard library
+Add :data:`sys.stdlib_module_names`, containing the list of the standard library
 module names. Patch by Victor Stinner.
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 6a260da65556a..f172f2a5786c6 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -291,7 +291,7 @@
     <ClInclude Include="..\Python\ceval_gil.h" />
     <ClInclude Include="..\Python\condvar.h" />
     <ClInclude Include="..\Python\importdl.h" />
-    <ClInclude Include="..\Python\module_names.h" />
+    <ClInclude Include="..\Python\stdlib_module_names.h" />
     <ClInclude Include="..\Python\thread_nt.h" />
     <ClInclude Include="..\Python\wordcode_helpers.h" />
   </ItemGroup>
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index 98e3ca2c9e6b8..3bafdb8d29711 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -360,7 +360,7 @@
     <ClInclude Include="..\Python\importdl.h">
       <Filter>Python</Filter>
     </ClInclude>
-    <ClInclude Include="..\Python\module_names.h">
+    <ClInclude Include="..\Python\stdlib_module_names.h">
       <Filter>Python</Filter>
     </ClInclude>
     <ClInclude Include="..\Python\thread_nt.h">
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index a97f45d0d5dc4..bf5dcdd107e20 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -2497,7 +2497,7 @@ fatal_error_exit(int status)
 
 
 // Dump the list of extension modules of sys.modules, excluding stdlib modules
-// (sys.module_names), into fd file descriptor.
+// (sys.stdlib_module_names), into fd file descriptor.
 //
 // This function is called by a signal handler in faulthandler: avoid memory
 // allocations and keep the implementation simple. For example, the list is not
@@ -2519,19 +2519,19 @@ _Py_DumpExtensionModules(int fd, PyInterpreterState *interp)
     // Avoid PyDict_GetItemString() which calls PyUnicode_FromString(),
     // memory cannot be allocated on the heap in a signal handler.
     // Iterate on the dict instead.
-    PyObject *module_names = NULL;
+    PyObject *stdlib_module_names = NULL;
     pos = 0;
     while (PyDict_Next(interp->sysdict, &pos, &key, &value)) {
         if (PyUnicode_Check(key)
-           && PyUnicode_CompareWithASCIIString(key, "module_names") == 0) {
-            module_names = value;
+           && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) {
+            stdlib_module_names = value;
             break;
         }
     }
-    // If we failed to get sys.module_names or it's not a frozenset,
+    // If we failed to get sys.stdlib_module_names or it's not a frozenset,
     // don't exclude stdlib modules.
-    if (module_names != NULL && !PyFrozenSet_Check(module_names)) {
-        module_names = NULL;
+    if (stdlib_module_names != NULL && !PyFrozenSet_Check(stdlib_module_names)) {
+        stdlib_module_names = NULL;
     }
 
     // List extensions
@@ -2547,13 +2547,13 @@ _Py_DumpExtensionModules(int fd, PyInterpreterState *interp)
         }
         // Use the module name from the sys.modules key,
         // don't attempt to get the module object name.
-        if (module_names != NULL) {
+        if (stdlib_module_names != NULL) {
             int is_stdlib_ext = 0;
 
-            Py_ssize_t i;
+            Py_ssize_t i = 0;
             PyObject *item;
             Py_hash_t hash;
-            for (i=0; _PySet_NextEntry(module_names, &i, &item, &hash); ) {
+            while (_PySet_NextEntry(stdlib_module_names, &i, &item, &hash)) {
                 if (PyUnicode_Check(item)
                     && PyUnicode_Compare(key, item) == 0)
                 {
diff --git a/Python/module_names.h b/Python/stdlib_module_names.h
similarity index 95%
rename from Python/module_names.h
rename to Python/stdlib_module_names.h
index 0dc2633916d30..8c430821d64b8 100644
--- a/Python/module_names.h
+++ b/Python/stdlib_module_names.h
@@ -1,7 +1,7 @@
-// Auto-generated by Tools/scripts/generate_module_names.py.
-// List used to create sys.module_names.
+// Auto-generated by Tools/scripts/generate_stdlib_module_names.py.
+// List used to create sys.stdlib_module_names.
 
-static const char* _Py_module_names[] = {
+static const char* _Py_stdlib_module_names[] = {
 "__future__",
 "_abc",
 "_aix_support",
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index e2f7e39f33329..b9349effe3c87 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -29,7 +29,7 @@ Data members:
 #include "frameobject.h"          // PyFrame_GetBack()
 #include "pydtrace.h"
 #include "osdefs.h"               // DELIM
-#include "module_names.h"         // _Py_module_names
+#include "stdlib_module_names.h"  // _Py_stdlib_module_names
 #include <locale.h>
 
 #ifdef MS_WINDOWS
@@ -2054,16 +2054,16 @@ list_builtin_module_names(void)
 
 
 static PyObject *
-list_module_names(void)
+list_stdlib_module_names(void)
 {
-    Py_ssize_t len = Py_ARRAY_LENGTH(_Py_module_names);
+    Py_ssize_t len = Py_ARRAY_LENGTH(_Py_stdlib_module_names);
     PyObject *names = PyTuple_New(len);
     if (names == NULL) {
         return NULL;
     }
 
     for (Py_ssize_t i = 0; i < len; i++) {
-        PyObject *name = PyUnicode_FromString(_Py_module_names[i]);
+        PyObject *name = PyUnicode_FromString(_Py_stdlib_module_names[i]);
         if (name == NULL) {
             Py_DECREF(names);
             return NULL;
@@ -2784,7 +2784,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict)
     SET_SYS("hash_info", get_hash_info(tstate));
     SET_SYS("maxunicode", PyLong_FromLong(0x10FFFF));
     SET_SYS("builtin_module_names", list_builtin_module_names());
-    SET_SYS("module_names", list_module_names());
+    SET_SYS("stdlib_module_names", list_stdlib_module_names());
 #if PY_BIG_ENDIAN
     SET_SYS_FROM_STRING("byteorder", "big");
 #else
diff --git a/Tools/scripts/generate_module_names.py b/Tools/scripts/generate_stdlib_module_names.py
similarity index 92%
rename from Tools/scripts/generate_module_names.py
rename to Tools/scripts/generate_stdlib_module_names.py
index 9d363aa04b300..02647691fc4d6 100644
--- a/Tools/scripts/generate_module_names.py
+++ b/Tools/scripts/generate_stdlib_module_names.py
@@ -1,5 +1,5 @@
 # This script lists the names of standard library modules
-# to update Python/module_names.h
+# to update Python/stdlib_mod_names.h
 import os.path
 import re
 import subprocess
@@ -126,10 +126,11 @@ def list_modules():
 
 
 def write_modules(fp, names):
-    print("// Auto-generated by Tools/scripts/generate_module_names.py.", file=fp)
-    print("// List used to create sys.module_names.", file=fp)
+    print("// Auto-generated by Tools/scripts/generate_stdlib_module_names.py.",
+          file=fp)
+    print("// List used to create sys.stdlib_module_names.", file=fp)
     print(file=fp)
-    print("static const char* _Py_module_names[] = {", file=fp)
+    print("static const char* _Py_stdlib_module_names[] = {", file=fp)
     for name in sorted(names):
         print(f'"{name}",', file=fp)
     print("};", file=fp)



More information about the Python-checkins mailing list