diff --git a/Programs/_testembed.c b/Programs/_testembed.c index fc5f44d5eb6..b31781938eb 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -1827,26 +1827,6 @@ static int test_frozenmain(void) } #endif // !MS_WINDOWS - -// List frozen modules. -// Command used by Tools/scripts/generate_stdlib_module_names.py script. -static int list_frozen(void) -{ - const struct _frozen *p; - for (p = _PyImport_FrozenBootstrap; ; p++) { - if (p->name == NULL) - break; - printf("%s\n", p->name); - } - for (p = _PyImport_FrozenStdlib; ; p++) { - if (p->name == NULL) - break; - printf("%s\n", p->name); - } - return 0; -} - - static int test_repeated_init_and_inittab(void) { // bpo-44441: Py_RunMain() must reset PyImport_Inittab at exit. @@ -1960,8 +1940,6 @@ static struct TestCase TestCases[] = { {"test_frozenmain", test_frozenmain}, #endif - // Command - {"list_frozen", list_frozen}, {NULL, NULL} }; diff --git a/Tools/scripts/generate_stdlib_module_names.py b/Tools/scripts/generate_stdlib_module_names.py index 3e896ba7375..fe1e429ebce 100644 --- a/Tools/scripts/generate_stdlib_module_names.py +++ b/Tools/scripts/generate_stdlib_module_names.py @@ -1,5 +1,6 @@ # This script lists the names of standard library modules # to update Python/stdlib_mod_names.h +import _imp import os.path import re import subprocess @@ -11,7 +12,6 @@ STDLIB_PATH = os.path.join(SRC_DIR, 'Lib') MODULES_SETUP = os.path.join(SRC_DIR, 'Modules', 'Setup') SETUP_PY = os.path.join(SRC_DIR, 'setup.py') -TEST_EMBED = os.path.join(SRC_DIR, 'Programs', '_testembed') IGNORE = { '__init__', @@ -117,16 +117,11 @@ def list_modules_setup_extensions(names): # List frozen modules of the PyImport_FrozenModules list (Python/frozen.c). # Use the "./Programs/_testembed list_frozen" command. def list_frozen(names): - args = [TEST_EMBED, 'list_frozen'] - proc = subprocess.run(args, stdout=subprocess.PIPE, text=True) - exitcode = proc.returncode - if exitcode: - cmd = ' '.join(args) - print(f"{cmd} failed with exitcode {exitcode}") - sys.exit(exitcode) submodules = set() - for line in proc.stdout.splitlines(): - name = line.strip() + for name in _imp._frozen_module_names(): + # To skip __hello__, __hello_alias__ and etc. + if name.startswith('__'): + continue if '.' in name: submodules.add(name) else: