mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
gh-111374: Add a new PYTHON_FROZEN_MODULES env var, equivalent of -X frozen_modules. (#111411)
Adds a new PYTHON_FROZEN_MODULES env var to correspond with -X frozen_modules. Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
This commit is contained in:
parent
7e135a48d6
commit
45a36d5f56
5 changed files with 56 additions and 6 deletions
|
|
@ -535,12 +535,13 @@ Miscellaneous options
|
|||
location indicators when the interpreter displays tracebacks. See also
|
||||
:envvar:`PYTHONNODEBUGRANGES`.
|
||||
* ``-X frozen_modules`` determines whether or not frozen modules are
|
||||
ignored by the import machinery. A value of "on" means they get
|
||||
imported and "off" means they are ignored. The default is "on"
|
||||
ignored by the import machinery. A value of ``on`` means they get
|
||||
imported and ``off`` means they are ignored. The default is ``on``
|
||||
if this is an installed Python (the normal case). If it's under
|
||||
development (running from the source tree) then the default is "off".
|
||||
Note that the "importlib_bootstrap" and "importlib_bootstrap_external"
|
||||
frozen modules are always used, even if this flag is set to "off".
|
||||
development (running from the source tree) then the default is ``off``.
|
||||
Note that the :mod:`!importlib_bootstrap` and
|
||||
:mod:`!importlib_bootstrap_external` frozen modules are always used, even
|
||||
if this flag is set to ``off``. See also :envvar:`PYTHON_FROZEN_MODULES`.
|
||||
* ``-X perf`` enables support for the Linux ``perf`` profiler.
|
||||
When this option is provided, the ``perf`` profiler will be able to
|
||||
report Python calls. This option is only available on some platforms and
|
||||
|
|
@ -1095,6 +1096,20 @@ conflict.
|
|||
|
||||
.. versionadded:: 3.13
|
||||
|
||||
.. envvar:: PYTHON_FROZEN_MODULES
|
||||
|
||||
If this variable is set to ``on`` or ``off``, it determines whether or not
|
||||
frozen modules are ignored by the import machinery. A value of ``on`` means
|
||||
they get imported and ``off`` means they are ignored. The default is ``on``
|
||||
for non-debug builds (the normal case) and ``off`` for debug builds.
|
||||
Note that the :mod:`!importlib_bootstrap` and
|
||||
:mod:`!importlib_bootstrap_external` frozen modules are always used, even
|
||||
if this flag is set to ``off``.
|
||||
|
||||
See also the :option:`-X frozen_modules <-X>` command-line option.
|
||||
|
||||
.. versionadded:: 3.13
|
||||
|
||||
|
||||
Debug-mode variables
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -120,6 +120,11 @@ Other Language Changes
|
|||
is rejected when the global is used in the :keyword:`else` block.
|
||||
(Contributed by Irit Katriel in :gh:`111123`.)
|
||||
|
||||
* Added a new environment variable :envvar:`PYTHON_FROZEN_MODULES`. It
|
||||
determines whether or not frozen modules are ignored by the import machinery,
|
||||
equivalent of the :option:`-X frozen_modules <-X>` command-line option.
|
||||
(Contributed by Yilei Yang in :gh:`111374`.)
|
||||
|
||||
New Modules
|
||||
===========
|
||||
|
||||
|
|
|
|||
|
|
@ -153,6 +153,17 @@ class CmdLineTest(unittest.TestCase):
|
|||
res = assert_python_ok(*cmd)
|
||||
self.assertRegex(res.out.decode('utf-8'), expected)
|
||||
|
||||
def test_env_var_frozen_modules(self):
|
||||
tests = {
|
||||
('on', 'FrozenImporter'),
|
||||
('off', 'SourceFileLoader'),
|
||||
}
|
||||
for raw, expected in tests:
|
||||
cmd = ['-c', 'import os; print(os.__spec__.loader, end="")']
|
||||
with self.subTest(raw):
|
||||
res = assert_python_ok(*cmd, PYTHON_FROZEN_MODULES=raw)
|
||||
self.assertRegex(res.out.decode('utf-8'), expected)
|
||||
|
||||
def test_run_module(self):
|
||||
# Test expected operation of the '-m' switch
|
||||
# Switch needs an argument
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
Added a new environment variable :envvar:`PYTHON_FROZEN_MODULES`. It
|
||||
determines whether or not frozen modules are ignored by the import machinery,
|
||||
equivalent of the :option:`-X frozen_modules <-X>` command-line option.
|
||||
|
|
@ -285,11 +285,14 @@ static const char usage_envvars[] =
|
|||
"PYTHONDEVMODE: enable the development mode.\n"
|
||||
"PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n"
|
||||
"PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n"
|
||||
"PYTHONNODEBUGRANGES: If this variable is set, it disables the inclusion of the \n"
|
||||
"PYTHONNODEBUGRANGES: if this variable is set, it disables the inclusion of the \n"
|
||||
" tables mapping extra location information (end line, start column offset \n"
|
||||
" and end column offset) to every instruction in code objects. This is useful \n"
|
||||
" when smaller code objects and pyc files are desired as well as suppressing the \n"
|
||||
" extra visual location indicators when the interpreter displays tracebacks.\n"
|
||||
"PYTHON_FROZEN_MODULES : if this variable is set, it determines whether or not \n"
|
||||
" frozen modules should be used. The default is \"on\" (or \"off\" if you are \n"
|
||||
" running a local build).\n"
|
||||
"These variables have equivalent command-line parameters (see --help for details):\n"
|
||||
"PYTHONDEBUG : enable parser debug mode (-d)\n"
|
||||
"PYTHONDONTWRITEBYTECODE : don't write .pyc files (-B)\n"
|
||||
|
|
@ -2132,6 +2135,19 @@ config_init_import(PyConfig *config, int compute_path_config)
|
|||
return status;
|
||||
}
|
||||
|
||||
const char *env = config_get_env(config, "PYTHON_FROZEN_MODULES");
|
||||
if (env == NULL) {
|
||||
}
|
||||
else if (strcmp(env, "on") == 0) {
|
||||
config->use_frozen_modules = 1;
|
||||
}
|
||||
else if (strcmp(env, "off") == 0) {
|
||||
config->use_frozen_modules = 0;
|
||||
} else {
|
||||
return PyStatus_Error("bad value for PYTHON_FROZEN_MODULES "
|
||||
"(expected \"on\" or \"off\")");
|
||||
}
|
||||
|
||||
/* -X frozen_modules=[on|off] */
|
||||
const wchar_t *value = config_get_xoption_value(config, L"frozen_modules");
|
||||
if (value == NULL) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue