diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6a41b518245..48b5825db04 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 c908891b2e3..6a22d20455b 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 f187895410c..0219ae8ceb6 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 3026a1ac0e5..30a82816444 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 5f5c0d038d9..8e92a50026c 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -581,7 +581,7 @@ class CAPITest(unittest.TestCase):
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 02077a69bb4..648624482e5 100644
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -336,7 +336,7 @@ class FaultHandlerTests(unittest.TestCase):
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 729b8667fc8..c4e05359480 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -987,8 +987,8 @@ class SysModuleTest(unittest.TestCase):
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 ca6b5189c75..0b22bdd5591 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 0631acd7a98..373b829b0fb 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 6a260da6555..f172f2a5786 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -291,7 +291,7 @@
-
+
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index 98e3ca2c9e6..3bafdb8d297 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -360,7 +360,7 @@
Python
-
+
Python
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index a97f45d0d5d..bf5dcdd107e 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 0dc2633916d..8c430821d64 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 e2f7e39f333..b9349effe3c 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
#ifdef MS_WINDOWS
@@ -2054,16 +2054,16 @@ error:
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 9d363aa04b3..02647691fc4 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)