Extensions: ensure extensions "site-packages" precede Python's

Ensure extensions modules aren't overridden to the systems modules.
Without this, installing a system module could break an extension.
This commit is contained in:
Campbell Barton
2024-05-08 21:27:39 +10:00
parent b7bb0e94a0
commit 3d84a1170f

View File

@@ -1109,7 +1109,21 @@ def _initialize_extensions_site_packages(*, create=False):
found = os.path.exists(site_packages)
if found:
sys.path.append(site_packages)
# Ensure the wheels `site-packages` are added before all other site-packages.
# This is important for extensions modules get priority over system modules.
# Without this, installing a module into the systems site-packages (`/usr/lib/python#.##/site-packages`)
# could break an extension which already had a different version of this module installed locally.
from site import getsitepackages
index = None
if builtin_site_packages := set(getsitepackages()):
for i, dirpath in enumerate(sys.path):
if dirpath in builtin_site_packages:
index = i
break
if index is None:
sys.path.append(site_packages)
else:
sys.path.insert(index, site_packages)
else:
try:
sys.path.remove(site_packages)