diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py index 1a42a9d41..7639dabca 100644 --- a/src/pip/_internal/build_env.py +++ b/src/pip/_internal/build_env.py @@ -468,15 +468,19 @@ class BuildEnvironment: """ import os, site, sys - # First, drop system-sites related paths. + # First, discover all system-sites related paths. original_sys_path = sys.path[:] + # Clear sys.path so addsitedir() will add system site paths and paths + # added by contained .pth files to sys.path reliably. This is necessary + # since Python 3.15, which notably no longer re-executes .pth files for + # known paths. + sys.path = [] known_paths = set() for path in {system_sites!r}: site.addsitedir(path, known_paths=known_paths) - system_paths = set( - os.path.normcase(path) - for path in sys.path[len(original_sys_path):] - ) + system_paths = set(os.path.normcase(path) for path in sys.path) + + # Drop discovered system-sites related paths. original_sys_path = [ path for path in original_sys_path if os.path.normcase(path) not in system_paths diff --git a/tests/lib/venv.py b/tests/lib/venv.py index 67b01d9f3..4e86b92b3 100644 --- a/tests/lib/venv.py +++ b/tests/lib/venv.py @@ -174,11 +174,13 @@ class VirtualEnvironment: site.ENABLE_USER_SITE = {self._user_site_packages} # First, drop system-sites related paths. original_sys_path = sys.path[:] + # To discover system-sites related paths, clear sys.path + # and build a new one with only system paths. + sys.path = [] known_paths = set() for path in site.getsitepackages(): site.addsitedir(path, known_paths=known_paths) - system_paths = sys.path[len(original_sys_path):] - for path in system_paths: + for path in sys.path: if path in original_sys_path: original_sys_path.remove(path) sys.path = original_sys_path