Commit e8f259a1 by finswimmer Committed by Bjorn Neergaard

fix: fix venv paths redirected by Python from MS Store

parent 03a64aa1
......@@ -36,10 +36,12 @@ from poetry.core.toml.file import TOMLFile
from poetry.core.utils.helpers import temporary_directory
from virtualenv.seed.wheels.embed import get_embed_wheel
from poetry.utils._compat import WINDOWS
from poetry.utils._compat import decode
from poetry.utils._compat import encode
from poetry.utils._compat import list_to_shell_command
from poetry.utils._compat import metadata
from poetry.utils.helpers import get_real_windows_path
from poetry.utils.helpers import is_dir_writable
from poetry.utils.helpers import paths_csv
from poetry.utils.helpers import remove_directory
......@@ -960,7 +962,10 @@ class EnvManager:
return self.get_system_env()
io.write_line(f"Creating virtualenv <c1>{name}</> in {venv_path!s}")
io.write_line(
f"Creating virtualenv <c1>{name}</> in"
f" {venv_path if not WINDOWS else get_real_windows_path(venv_path)!s}"
)
else:
create_venv = False
if force:
......@@ -1012,6 +1017,10 @@ class EnvManager:
with_setuptools: bool | None = None,
prompt: str | None = None,
) -> virtualenv.run.session.Session:
if WINDOWS:
path = get_real_windows_path(path)
executable = get_real_windows_path(executable) if executable else None
flags = flags or {}
flags["no-pip"] = (
......@@ -1153,6 +1162,10 @@ class Env:
self._is_mingw = sysconfig.get_platform().startswith("mingw")
self._is_conda = bool(os.environ.get("CONDA_DEFAULT_ENV"))
if self._is_windows:
path = get_real_windows_path(path)
base = get_real_windows_path(base) if base else None
if not self._is_windows or self._is_mingw:
bin_dir = "bin"
else:
......
......@@ -240,3 +240,20 @@ def get_win_folder(csidl_name: str) -> Path:
return Path(_get_win_folder(csidl_name))
raise RuntimeError("Method can only be called on Windows.")
def get_real_windows_path(path: str | Path) -> Path:
program_files = get_win_folder("CSIDL_PROGRAM_FILES")
local_appdata = get_win_folder("CSIDL_LOCAL_APPDATA")
path = Path(
str(path).replace(
str(program_files / "WindowsApps"),
str(local_appdata / "Microsoft/WindowsApps"),
)
)
if path.as_posix().startswith(local_appdata.as_posix()):
path = path.resolve()
return path
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment