From f44524a9a9c8122b9b98d6e5797e1dfc3211c0b7 Mon Sep 17 00:00:00 2001 From: Eliah Kagan Date: Tue, 19 Dec 2023 08:11:04 +0800 Subject: [PATCH] Avoid spurious "location may have moved" on Windows The main case where this happens is when tempfile.gettempdir() has a component in it that uses an 8.3-encoded path, e.g., C:\Users\Administrator\... -> C:\Users\ADMINI~1\... This is a workaround for python/cpython#90329. I call realpath only once, when the venv is created, and not on any paths inside the venv, to make it less likely this masks the problems the warning is meant for. (For example, if Scripts, or python.exe in it, produced this even with the venv created as it is now, then that may indicte an actual problem.) Note that copying python.exe from Scripts to one level up in the venv, and changing its name to bash.exe to use it to simulate the bash.exe impostor, as is done in test_hook_uses_shell_not_from_cwd, should not (and does not) produce this warning. If that ever starts to do so, then that should be examined as a sign of brittleness. --- test/lib/helper.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/lib/helper.py b/test/lib/helper.py index 2fb8990dd..1fdc56fd1 100644 --- a/test/lib/helper.py +++ b/test/lib/helper.py @@ -400,8 +400,12 @@ class VirtualEnvironment: __slots__ = ("_env_dir",) def __init__(self, env_dir, *, with_pip): - self._env_dir = env_dir - venv.create(env_dir, symlinks=(os.name != "nt"), with_pip=with_pip) + if os.name == "nt": + self._env_dir = osp.realpath(env_dir) + venv.create(self.env_dir, symlinks=False, with_pip=with_pip) + else: + self._env_dir = env_dir + venv.create(self.env_dir, symlinks=True, with_pip=with_pip) @property def env_dir(self):