MINGW-packages/mingw-w64-python3.13/0068-Change-user-site-packages-path-to-include-the-enviro.patch
Christoph Reiter 04c9ed3700 python3.13: Add 3.13.7
* add libb2 as dep
* remove "-Wl,--large-address-aware", default now via makepkg
* remove 2to3 logic, no longer in Python
2025-09-08 22:02:30 +02:00

122 lines
5.7 KiB
Diff

From bde48c85f4a669a0d9a98cd0aa37b93b16784292 Mon Sep 17 00:00:00 2001
From: Naveen M K <naveen521kk@gmail.com>
Date: Wed, 19 Jan 2022 20:01:45 +0530
Subject: [PATCH 068/N] Change user site-packages path to include the
environment info
This should avoid mixing of user site-packages between python
from various environments. Previously, the user site-packages
should be located at `~/.local/lib/python3.10` for all environment
including 32-bits variants which caused problems with 64-bit trying to
load 32-bit extensions. Now this path will be changed to
`~/.local/lib/python3.10-<platform tag here>`, for example, in
CLANG64 this would be `~/.local/lib/python3.10-mingw_x86_64_clang`.
Fixes https://github.com/msys2-contrib/cpython-mingw/issues/40
---
Lib/site.py | 28 +++++++++++++++++++++++++---
Lib/sysconfig/__init__.py | 26 +++++++++++++++-----------
2 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/Lib/site.py b/Lib/site.py
index 51c4456..55fd94f 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -315,6 +315,26 @@ def _getuserbase():
return joinuser("~", ".local")
+# Copy of sysconfig.get_platform() but only for MinGW
+def _get_platform():
+ if os.name == 'nt':
+ if 'gcc' in sys.version.lower():
+ if 'ucrt' in sys.version.lower():
+ if 'amd64' in sys.version.lower():
+ return 'mingw_x86_64_ucrt'
+ return 'mingw_i686_ucrt'
+ if 'clang' in sys.version.lower():
+ if 'amd64' in sys.version.lower():
+ return 'mingw_x86_64_clang'
+ if 'arm64' in sys.version.lower():
+ return 'mingw_aarch64'
+ if 'arm' in sys.version.lower():
+ return 'mingw_armv7'
+ return 'mingw_i686_clang'
+ if 'amd64' in sys.version.lower():
+ return 'mingw_x86_64'
+ return 'mingw_i686'
+ return sys.platform
# Same to sysconfig.get_path('purelib', os.name+'_user')
def _get_path(userbase):
@@ -326,9 +346,11 @@ def _get_path(userbase):
implementation = _get_implementation()
implementation_lower = implementation.lower()
- if os.name == 'nt' and not _POSIX_BUILD:
- ver_nodot = sys.winver.replace('.', '')
- return f'{userbase}\\{implementation}{ver_nodot}\\site-packages'
+ if os.name == 'nt':
+ if not _POSIX_BUILD:
+ ver_nodot = sys.winver.replace('.', '')
+ return f'{userbase}\\{implementation}{ver_nodot}\\site-packages'
+ return f'{userbase}/lib/python{version[0]}.{version[1]}-{_get_platform()}/site-packages'
if sys.platform == 'darwin' and sys._framework:
return f'{userbase}/lib/{implementation_lower}/site-packages'
diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py
index 486ada1..8b0c7cf 100644
--- a/Lib/sysconfig/__init__.py
+++ b/Lib/sysconfig/__init__.py
@@ -143,20 +143,20 @@ if _HAS_USER_BASE:
_INSTALL_SCHEMES |= {
# NOTE: When modifying "purelib" scheme, update site._get_path() too.
'nt_user': {
- 'stdlib': '{userbase}/lib/python{py_version_short}',
- 'platstdlib': '{userbase}/lib/python{py_version_short}',
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
- 'include': '{userbase}/include/python{py_version_short}',
+ 'stdlib': '{userbase}/lib/python{py_version_short_plat}',
+ 'platstdlib': '{userbase}/lib/python{py_version_short_plat}',
+ 'purelib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
+ 'platlib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
+ 'include': '{userbase}/include/python{py_version_short_plat}',
'scripts': '{userbase}/bin',
'data': '{userbase}',
},
'posix_user': {
- 'stdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}',
- 'platstdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}{abi_thread}',
- 'purelib': '{userbase}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages',
- 'platlib': '{userbase}/lib/{implementation_lower}{py_version_short}{abi_thread}/site-packages',
- 'include': '{userbase}/include/{implementation_lower}{py_version_short}{abi_thread}',
+ 'stdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short_plat}',
+ 'platstdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short_plat}',
+ 'purelib': '{userbase}/lib/{implementation_lower}{py_version_short_plat}/site-packages',
+ 'platlib': '{userbase}/lib/{implementation_lower}{py_version_short_plat}/site-packages',
+ 'include': '{userbase}/include/{implementation_lower}{py_version_short_plat}',
'scripts': '{userbase}/bin',
'data': '{userbase}',
},
@@ -499,6 +499,10 @@ def _init_config_vars():
_CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '')
except AttributeError:
_CONFIG_VARS['py_version_nodot_plat'] = ''
+ if os.name == 'nt' and _POSIX_BUILD:
+ _CONFIG_VARS['py_version_short_plat'] = f'{_PY_VERSION_SHORT}-{get_platform()}'
+ else:
+ _CONFIG_VARS['py_version_short_plat'] = _PY_VERSION_SHORT
if os.name == 'nt' and not _POSIX_BUILD:
_init_non_posix(_CONFIG_VARS)
@@ -589,7 +593,7 @@ def get_config_var(name):
"""
return get_config_vars().get(name)
-
+# make sure to change site._get_platform() while changing this function
def get_platform():
"""Return a string that identifies the current platform.