diff options
author | Steve Dower <steve.dower@python.org> | 2021-12-08 19:25:58 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-08 19:25:58 (GMT) |
commit | 7778116c2f573edf320bd55301137a968e4339d8 (patch) | |
tree | dfdc3d43400f0f1f511aa0097e4d6bccfc077833 | |
parent | 3cb9731b7e59b0df9a7a9ab6b7746a669958b693 (diff) | |
download | cpython-7778116c2f573edf320bd55301137a968e4339d8.zip cpython-7778116c2f573edf320bd55301137a968e4339d8.tar.gz cpython-7778116c2f573edf320bd55301137a968e4339d8.tar.bz2 |
bpo-46015: Fixes calculation of sys.path in a venv on Windows (GH-29992)
Also ensures that pybuilddir.txt is written early enough in the build to be picked up by later steps.
-rw-r--r-- | Lib/test/test_embed.py | 2 | ||||
-rw-r--r-- | Lib/test/test_getpath.py | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2021-12-08-16-36-20.bpo-46105.t1mJ6Q.rst | 1 | ||||
-rw-r--r-- | Modules/getpath.c | 2 | ||||
-rw-r--r-- | Modules/getpath.py | 19 | ||||
-rw-r--r-- | PCbuild/python.vcxproj | 7 |
6 files changed, 20 insertions, 12 deletions
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 94161b6..8012d80 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1362,6 +1362,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): if not MS_WINDOWS: paths[-1] = lib_dynload else: + # Include DLLs directory as well + paths.insert(1, '.\\DLLs') for index, path in enumerate(paths): if index == 0: # Because we copy the DLLs into tmpdir as well, the zip file diff --git a/Lib/test/test_getpath.py b/Lib/test/test_getpath.py index 9dd167b..3fb1b28 100644 --- a/Lib/test/test_getpath.py +++ b/Lib/test/test_getpath.py @@ -100,6 +100,7 @@ class MockGetPathTests(unittest.TestCase): module_search_paths_set=1, module_search_paths=[ r"C:\Python\python98.zip", + r"C:\Python\DLLs", r"C:\Python\Lib", r"C:\Python", ], diff --git a/Misc/NEWS.d/next/Windows/2021-12-08-16-36-20.bpo-46105.t1mJ6Q.rst b/Misc/NEWS.d/next/Windows/2021-12-08-16-36-20.bpo-46105.t1mJ6Q.rst new file mode 100644 index 0000000..bfb6d31 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-12-08-16-36-20.bpo-46105.t1mJ6Q.rst @@ -0,0 +1 @@ +Fixed calculation of :data:`sys.path` in a venv on Windows. diff --git a/Modules/getpath.c b/Modules/getpath.c index 0b982f1..fedb41c 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -390,7 +390,7 @@ getpath_readlines(PyObject *Py_UNUSED(self), PyObject *args) while (cb && (p1[cb] == L'\n' || p1[cb] == L'\r')) { --cb; } - PyObject *u = PyUnicode_FromWideChar(p1, cb + 1); + PyObject *u = PyUnicode_FromWideChar(p1, cb ? cb + 1 : 0); if (!u || PyList_Append(r, u) < 0) { Py_XDECREF(u); Py_CLEAR(r); diff --git a/Modules/getpath.py b/Modules/getpath.py index 6a13e23..84c9760 100644 --- a/Modules/getpath.py +++ b/Modules/getpath.py @@ -668,14 +668,17 @@ elif not pythonpath: pythonpath.append(joinpath(prefix, p)) # Then add stdlib_dir and platstdlib_dir - if stdlib_dir: - pythonpath.append(stdlib_dir) - if platstdlib_dir: - if os_name == 'nt' and venv_prefix: - # QUIRK: Windows appends executable_dir instead of platstdlib_dir - # when in a venv - pythonpath.append(executable_dir) - else: + if os_name == 'nt' and venv_prefix: + # QUIRK: Windows generates paths differently in a venv + if platstdlib_dir: + pythonpath.append(platstdlib_dir) + if stdlib_dir: + pythonpath.append(stdlib_dir) + pythonpath.append(executable_dir) + else: + if stdlib_dir: + pythonpath.append(stdlib_dir) + if platstdlib_dir: pythonpath.append(platstdlib_dir) config['module_search_paths'] = pythonpath diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj index f445137..77bccde 100644 --- a/PCbuild/python.vcxproj +++ b/PCbuild/python.vcxproj @@ -117,6 +117,10 @@ <Import Project="regen.targets" /> </ImportGroup> <Target Name="_TriggerPostRegen" AfterTargets="Build" DependsOnTargets="PostBuildRegen" /> + <Target Name="GeneratePyBuildDirTxt" AfterTargets="Link"> + <Message Text="Generating $(OutDir)pybuilddir.txt" /> + <WriteLinesToFile File="$(OutDir)pybuilddir.txt" Lines="%0D%0A" Overwrite="true" /> + </Target> <Target Name="ValidateUcrtbase" AfterTargets="AfterBuild" Condition="$(Configuration) != 'PGInstrument' and $(Platform) != 'ARM' and $(Platform) != 'ARM64'"> <PropertyGroup> <UcrtName>ucrtbase</UcrtName> @@ -147,7 +151,4 @@ $(_PGOPath) </PropertyGroup> <WriteLinesToFile File="$(PySourcePath)python.bat" Lines="$(_Content)" Overwrite="true" Condition="'$(_Content)' != '$(_ExistingContent)'" /> </Target> - <Target Name="GeneratePyBuildDirTxt" BeforeTargets="AfterBuild"> - <WriteLinesToFile File="$(OutDir)pybuilddir.txt" Lines="" Overwrite="true" /> - </Target> </Project> |