diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 2f93eaae560..194128e5c6b 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -487,6 +487,7 @@ class SysModuleTest(unittest.TestCase): self.assertIsInstance(sys.platform, str) self.assertIsInstance(sys.prefix, str) self.assertIsInstance(sys.base_prefix, str) + self.assertIsInstance(sys.platlibdir, str) self.assertIsInstance(sys.version, str) vi = sys.version_info self.assertIsInstance(vi[:], tuple) diff --git a/Makefile.pre.in b/Makefile.pre.in index 9a82729aa0f..5972dc7b495 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -775,7 +775,6 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile -DEXEC_PREFIX='"$(exec_prefix)"' \ -DVERSION='"$(VERSION)"' \ -DVPATH='"$(VPATH)"' \ - -DPLATLIBDIR='"$(PLATLIBDIR)"' \ -o $@ $(srcdir)/Modules/getpath.c Programs/python.o: $(srcdir)/Programs/python.c @@ -807,7 +806,6 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h $(CC) -c $(PY_CORE_CFLAGS) \ -DABIFLAGS='"$(ABIFLAGS)"' \ - -DPLATLIBDIR='"$(PLATLIBDIR)"' \ $(MULTIARCH_CPPFLAGS) \ -o $@ $(srcdir)/Python/sysmodule.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-06-11-16-06-49.bpo-40947.72cZcR.rst b/Misc/NEWS.d/next/Core and Builtins/2020-06-11-16-06-49.bpo-40947.72cZcR.rst new file mode 100644 index 00000000000..e7dfe06531a --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-06-11-16-06-49.bpo-40947.72cZcR.rst @@ -0,0 +1,2 @@ +The Python :ref:`Path Configuration ` now takes +:c:member:`PyConfig.platlibdir` in account. diff --git a/Modules/getpath.c b/Modules/getpath.c index 469c9ca0106..f7a6dd40443 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -130,7 +130,7 @@ typedef struct { wchar_t *exec_prefix_macro; /* EXEC_PREFIX macro */ wchar_t *vpath_macro; /* VPATH macro */ - wchar_t *lib_python; /* "lib/pythonX.Y" */ + wchar_t *lib_python; /* / "pythonX.Y" */ int prefix_found; /* found platform independent libraries? */ int exec_prefix_found; /* found the platform dependent libraries? */ @@ -810,7 +810,7 @@ calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) "Could not find platform dependent libraries \n"); } - /* / "lib-dynload" */ + /* / "lib-dynload" */ wchar_t *lib_dynload = joinpath2(calculate->platlibdir, L"lib-dynload"); if (lib_dynload == NULL) { @@ -1296,8 +1296,10 @@ calculate_zip_path(PyCalculatePath *calculate) { PyStatus res; - /* Path: / "pythonXY.zip" */ - wchar_t *path = joinpath2(calculate->platlibdir, L"python" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) L".zip"); + /* Path: / "pythonXY.zip" */ + wchar_t *path = joinpath2(calculate->platlibdir, + L"python" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) + L".zip"); if (path == NULL) { return _PyStatus_NO_MEMORY(); } @@ -1305,7 +1307,7 @@ calculate_zip_path(PyCalculatePath *calculate) if (calculate->prefix_found > 0) { /* Use the reduced prefix returned by Py_GetPrefix() - Path: / / "pythonXY.zip" */ + Path: / / "pythonXY.zip" */ wchar_t *parent = _PyMem_RawWcsdup(calculate->prefix); if (parent == NULL) { res = _PyStatus_NO_MEMORY(); @@ -1426,6 +1428,11 @@ static PyStatus calculate_init(PyCalculatePath *calculate, const PyConfig *config) { size_t len; + + calculate->warnings = config->pathconfig_warnings; + calculate->pythonpath_env = config->pythonpath_env; + calculate->platlibdir = config->platlibdir; + const char *path = getenv("PATH"); if (path) { calculate->path_env = Py_DecodeLocale(path, &len); @@ -1452,14 +1459,16 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config) return DECODE_LOCALE_ERR("VPATH macro", len); } - calculate->lib_python = Py_DecodeLocale(PLATLIBDIR "/python" VERSION, &len); - if (!calculate->lib_python) { + // / "pythonX.Y" + wchar_t *pyversion = Py_DecodeLocale("python" VERSION, &len); + if (!pyversion) { return DECODE_LOCALE_ERR("VERSION macro", len); } - - calculate->warnings = config->pathconfig_warnings; - calculate->pythonpath_env = config->pythonpath_env; - calculate->platlibdir = config->platlibdir; + calculate->lib_python = joinpath2(config->platlibdir, pyversion); + PyMem_RawFree(pyversion); + if (calculate->lib_python == NULL) { + return _PyStatus_NO_MEMORY(); + } return _PyStatus_OK(); }