Skip to content

Commit

Permalink
Change user site-packages path to include the environment info
Browse files Browse the repository at this point in the history
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 #40
  • Loading branch information
naveen521kk authored and lazka committed Aug 25, 2023
1 parent e634147 commit afa915e
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 16 deletions.
5 changes: 3 additions & 2 deletions Lib/distutils/command/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
INSTALL_SCHEMES['nt_user'] = {
'purelib': '$usersite',
'platlib': '$usersite',
'headers': '$userbase/include/python$py_version_short$abiflags/$dist_name',
'headers': '$userbase/include/python$py_version_short_plat$abiflags/$dist_name',
'scripts': '$userbase/bin',
'data' : '$userbase',
}
Expand All @@ -81,7 +81,7 @@
'purelib': '$usersite',
'platlib': '$usersite',
'headers':
'$userbase/include/python$py_version_short$abiflags/$dist_name',
'$userbase/include/python$py_version_short_plat$abiflags/$dist_name',
'scripts': '$userbase/bin',
'data' : '$userbase',
}
Expand Down Expand Up @@ -311,6 +311,7 @@ def finalize_options(self):
'py_version': py_version,
'py_version_short': '%d.%d' % sys.version_info[:2],
'py_version_nodot': '%d%d' % sys.version_info[:2],
'py_version_short_plat': f'{sys.version_info[0]}.{sys.version_info[1]}-{get_platform()}' if os.name == 'nt' and 'gcc' in sys.version.lower() else f'{sys.version_info[0]}.{sys.version_info[1]}',
'sys_prefix': prefix,
'prefix': prefix,
'sys_exec_prefix': exec_prefix,
Expand Down
28 changes: 25 additions & 3 deletions Lib/site.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,14 +289,36 @@ def joinuser(*args):

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):
version = sys.version_info

if os.name == 'nt' and not _POSIX_BUILD:
ver_nodot = sys.winver.replace('.', '')
return f'{userbase}\\Python{ver_nodot}\\site-packages'
if os.name == 'nt':
if not _POSIX_BUILD:
ver_nodot = sys.winver.replace('.', '')
return f'{userbase}\\Python{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/python/site-packages'
Expand Down
26 changes: 15 additions & 11 deletions Lib/sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,20 +140,20 @@ def joinuser(*args):
_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}/python{py_version_short}',
'platstdlib': '{userbase}/{platlibdir}/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}/{platlibdir}/python{py_version_short_plat}',
'platstdlib': '{userbase}/{platlibdir}/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}',
},
Expand Down Expand Up @@ -695,6 +695,10 @@ def get_config_vars(*args):
_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)
Expand Down Expand Up @@ -747,7 +751,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.
Expand Down

0 comments on commit afa915e

Please sign in to comment.