8000 Fix some Windows cross-drive issues. by jsirois · Pull Request #2781 · pex-tool/pex · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Fix some Windows cross-drive issues. #2781

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions pex/pex_bootstrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
)
from pex.layout import Layout
from pex.orderedset import OrderedSet
from pex.os import safe_execv
from pex.os import WINDOWS, safe_execv
from pex.pex_info import PexInfo
from pex.sysconfig import SCRIPT_DIR, script_name
from pex.targets import LocalInterpreter
Expand Down Expand Up @@ -585,7 +585,8 @@ def ensure_venv(
copy_mode = copy_mode or (
CopyMode.SYMLINK
if (
pex.layout != Layout.LOOSE
not WINDOWS
and pex.layout != Layout.LOOSE
and not pex_info.venv_site_packages_copies
)
else CopyMode.LINK
Expand Down
5 changes: 4 additions & 1 deletion pex/pex_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
from pex.interpreter import PythonInterpreter
from pex.layout import Layout
from pex.orderedset import OrderedSet
from pex.os import WINDOWS
from pex.pep_376 import InstalledWheel
from pex.pex import PEX
from pex.pex_info import PexInfo
Expand Down Expand Up @@ -164,7 +165,9 @@ def __init__(
self._chroot = chroot or Chroot(path or safe_mkdtemp())
self._pex_info = pex_info or PexInfo.default()
self._preamble = preamble or ""
self._copy_mode = copy_mode
self._copy_mode = (
CopyMode.LINK if ((copy_mode is CopyMode.SYMLINK) and WINDOWS) else copy_mode
)

self._shebang = self._interpreter.identity.hashbang()
self._header = None # type: Optional[str]
Expand Down
5 changes: 4 additions & 1 deletion pex/pip/installation.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from pex.interpreter import PythonInterpreter
from pex.jobs import iter_map_parallel
from pex.orderedset import OrderedSet
from pex.os import WINDOWS
from pex.pep_503 import ProjectName
from pex.pex import PEX
from pex.pex_bootstrapper import ensure_venv
Expand Down Expand Up @@ -54,7 +55,9 @@ def _create_pip(

pip_interpreter = interpreter or PythonInterpreter.get()
pex = PEX(pip_pex.path, interpreter=pip_interpreter)
venv_pex = ensure_venv(pex, copy_mode=CopyMode.SYMLINK, record_access=record_access)
venv_pex = ensure_venv(
pex, copy_mode=CopyMode.LINK if WINDOWS else CopyMode.SYMLINK, record_access=record_access
)
pex_hash = pex.pex_info().pex_hash
production_assert(pex_hash is not None)
pip_venv = PipVenv(
Expand Down
4 changes: 2 additions & 2 deletions pex/venv/virtualenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

from pex.atomic_directory import AtomicDirectory, atomic_directory
from pex.common import safe_mkdir, safe_open
from pex.compatibility import commonpath, get_stdout_bytes_buffer, safe_commonpath
from pex.compatibility import get_stdout_bytes_buffer, safe_commonpath
from pex.dist_metadata import Distribution, find_distributions
from pex.enum import Enum
from pex.executor import Executor
Expand Down Expand Up @@ -106,7 +106,7 @@ def _find_preferred_site_packages_dir(

interpreter = interpreter or PythonInterpreter.get()
for entry in interpreter.site_packages:
if commonpath((real_venv_dir, entry.path)) != real_venv_dir:
if safe_commonpath((real_venv_dir, entry.path)) != real_venv_dir:
# This ignores system site packages when the venv is built with --system-site-packages.
continue
if os.path.isdir(entry.path):
Expand Down
0