summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2021-12-08 19:25:58 (GMT)
committerGitHub <noreply@github.com>2021-12-08 19:25:58 (GMT)
commit7778116c2f573edf320bd55301137a968e4339d8 (patch)
treedfdc3d43400f0f1f511aa0097e4d6bccfc077833
parent3cb9731b7e59b0df9a7a9ab6b7746a669958b693 (diff)
downloadcpython-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.py2
-rw-r--r--Lib/test/test_getpath.py1
-rw-r--r--Misc/NEWS.d/next/Windows/2021-12-08-16-36-20.bpo-46105.t1mJ6Q.rst1
-rw-r--r--Modules/getpath.c2
-rw-r--r--Modules/getpath.py19
-rw-r--r--PCbuild/python.vcxproj7
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>