bpo-41627: Distinguish 32 and 64-bit user site packages on Windows (GH-22098)

Also fixes the error message returned when sysconfig fails to interpolate a variable correctly.
This commit is contained in:
Steve Dower 2020-09-05 00:45:54 +01:00 committed by GitHub
parent 51b84f8e96
commit dd18001c30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 10 deletions

View File

@ -274,7 +274,8 @@ def _get_path(userbase):
version = sys.version_info version = sys.version_info
if os.name == 'nt': if os.name == 'nt':
return f'{userbase}\\Python{version[0]}{version[1]}\\site-packages' ver_nodot = sys.winver.replace('.', '')
return f'{userbase}\\Python{ver_nodot}\\site-packages'
if sys.platform == 'darwin' and sys._framework: if sys.platform == 'darwin' and sys._framework:
return f'{userbase}/lib/python/site-packages' return f'{userbase}/lib/python/site-packages'

View File

@ -53,12 +53,12 @@ _INSTALL_SCHEMES = {
}, },
# NOTE: When modifying "purelib" scheme, update site._get_path() too. # NOTE: When modifying "purelib" scheme, update site._get_path() too.
'nt_user': { 'nt_user': {
'stdlib': '{userbase}/Python{py_version_nodot}', 'stdlib': '{userbase}/Python{py_version_nodot_plat}',
'platstdlib': '{userbase}/Python{py_version_nodot}', 'platstdlib': '{userbase}/Python{py_version_nodot_plat}',
'purelib': '{userbase}/Python{py_version_nodot}/site-packages', 'purelib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
'platlib': '{userbase}/Python{py_version_nodot}/site-packages', 'platlib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
'include': '{userbase}/Python{py_version_nodot}/Include', 'include': '{userbase}/Python{py_version_nodot_plat}/Include',
'scripts': '{userbase}/Python{py_version_nodot}/Scripts', 'scripts': '{userbase}/Python{py_version_nodot_plat}/Scripts',
'data': '{userbase}', 'data': '{userbase}',
}, },
'posix_user': { 'posix_user': {
@ -149,10 +149,10 @@ if _PYTHON_BUILD:
def _subst_vars(s, local_vars): def _subst_vars(s, local_vars):
try: try:
return s.format(**local_vars) return s.format(**local_vars)
except KeyError: except KeyError as var:
try: try:
return s.format(**os.environ) return s.format(**os.environ)
except KeyError as var: except KeyError:
raise AttributeError('{%s}' % var) from None raise AttributeError('{%s}' % var) from None
def _extend_dict(target_dict, other_dict): def _extend_dict(target_dict, other_dict):
@ -431,6 +431,7 @@ def _init_non_posix(vars):
vars['EXE'] = '.exe' vars['EXE'] = '.exe'
vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable))
vars['TZPATH'] = ''
# #
# public APIs # public APIs
@ -543,10 +544,13 @@ def get_config_vars(*args):
except AttributeError: except AttributeError:
# sys.abiflags may not be defined on all platforms. # sys.abiflags may not be defined on all platforms.
_CONFIG_VARS['abiflags'] = '' _CONFIG_VARS['abiflags'] = ''
try:
_CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '')
except AttributeError:
_CONFIG_VARS['py_version_nodot_plat'] = ''
if os.name == 'nt': if os.name == 'nt':
_init_non_posix(_CONFIG_VARS) _init_non_posix(_CONFIG_VARS)
_CONFIG_VARS['TZPATH'] = ''
if os.name == 'posix': if os.name == 'posix':
_init_posix(_CONFIG_VARS) _init_posix(_CONFIG_VARS)
# For backward compatibility, see issue19555 # For backward compatibility, see issue19555

View File

@ -0,0 +1,2 @@
The user site directory for 32-bit now includes a ``-32`` suffix to
distinguish it from the 64-bit interpreter's directory.