diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py index 6507a7b5b0f695..10ba9bea8a3c6b 100644 --- a/Lib/sysconfig/__init__.py +++ b/Lib/sysconfig/__init__.py @@ -1,5 +1,6 @@ """Access to Python's configuration information.""" +import _sysconfig import os import sys import threading @@ -172,7 +173,7 @@ def joinuser(*args): _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', 'scripts', 'data') -_PY_VERSION = sys.version.split()[0] +_PY_VERSION = _sysconfig.PY_VERSION _PY_VERSION_SHORT = f'{sys.version_info[0]}.{sys.version_info[1]}' _PY_VERSION_SHORT_NO_DOT = f'{sys.version_info[0]}{sys.version_info[1]}' _BASE_PREFIX = os.path.normpath(sys.base_prefix) @@ -385,7 +386,6 @@ def _init_non_posix(vars): """Initialize the module as appropriate for NT""" # set basic install directories import _winapi - import _sysconfig vars['LIBDEST'] = get_path('stdlib') vars['BINLIBDEST'] = get_path('platstdlib') vars['INCLUDEPY'] = get_path('include') @@ -665,7 +665,6 @@ def get_platform(): For other non-POSIX platforms, currently just returns :data:`sys.platform`.""" if os.name == 'nt': - import _sysconfig platform = _sysconfig.get_platform() if platform: return platform diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index e43f91eb9238f9..09c1fd27782a20 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -741,6 +741,14 @@ def test_sysconfig_config_vars_no_prefix_cache(self): self.assertEqual(config_vars['exec_prefix'], sys.exec_prefix) self.assertEqual(config_vars['platbase'], sys.exec_prefix) + def test_py_version(self): + config_vars = sysconfig.get_config_vars() + py_version = config_vars['py_version'] + self.assertIsInstance(py_version, str) + ver = sys.version_info + version = f'{ver.major}.{ver.minor}.{ver.micro}' + self.assertStartsWith(py_version, version) + class MakefileTests(unittest.TestCase): diff --git a/Modules/_sysconfig.c b/Modules/_sysconfig.c index bcb9d108174f43..79945675a2baba 100644 --- a/Modules/_sysconfig.c +++ b/Modules/_sysconfig.c @@ -117,6 +117,14 @@ _sysconfig_get_platform_impl(PyObject *module) #endif // MS_WINDOWS +static int +sysconfig_module_exec(PyObject *module) +{ + return PyModule_Add(module, "PY_VERSION", + PyUnicode_FromString(PY_VERSION)); +} + + PyDoc_STRVAR(sysconfig__doc__, "A helper for the sysconfig module."); @@ -127,6 +135,7 @@ static struct PyMethodDef sysconfig_methods[] = { }; static PyModuleDef_Slot sysconfig_slots[] = { + {Py_mod_exec, sysconfig_module_exec}, {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED}, {Py_mod_gil, Py_MOD_GIL_NOT_USED}, {0, NULL}