mirror of
https://github.com/python/cpython
synced 2024-10-14 11:18:47 +00:00
gh-103708: Make directory layout in sysconfig implementation configurable (#103709)
This commit is contained in:
parent
cf34b7704b
commit
f46987b828
16
Lib/site.py
16
Lib/site.py
|
@ -260,6 +260,10 @@ def check_enableusersite():
|
||||||
#
|
#
|
||||||
# See https://bugs.python.org/issue29585
|
# See https://bugs.python.org/issue29585
|
||||||
|
|
||||||
|
# Copy of sysconfig._get_implementation()
|
||||||
|
def _get_implementation():
|
||||||
|
return 'Python'
|
||||||
|
|
||||||
# Copy of sysconfig._getuserbase()
|
# Copy of sysconfig._getuserbase()
|
||||||
def _getuserbase():
|
def _getuserbase():
|
||||||
env_base = os.environ.get("PYTHONUSERBASE", None)
|
env_base = os.environ.get("PYTHONUSERBASE", None)
|
||||||
|
@ -275,7 +279,7 @@ def joinuser(*args):
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
base = os.environ.get("APPDATA") or "~"
|
base = os.environ.get("APPDATA") or "~"
|
||||||
return joinuser(base, "Python")
|
return joinuser(base, _get_implementation())
|
||||||
|
|
||||||
if sys.platform == "darwin" and sys._framework:
|
if sys.platform == "darwin" and sys._framework:
|
||||||
return joinuser("~", "Library", sys._framework,
|
return joinuser("~", "Library", sys._framework,
|
||||||
|
@ -288,12 +292,14 @@ def joinuser(*args):
|
||||||
def _get_path(userbase):
|
def _get_path(userbase):
|
||||||
version = sys.version_info
|
version = sys.version_info
|
||||||
|
|
||||||
|
implementation = _get_implementation()
|
||||||
|
implementation_lower = implementation.lower()
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
ver_nodot = sys.winver.replace('.', '')
|
ver_nodot = sys.winver.replace('.', '')
|
||||||
return f'{userbase}\\Python{ver_nodot}\\site-packages'
|
return f'{userbase}\\{implementation}{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/{implementation_lower}/site-packages'
|
||||||
|
|
||||||
return f'{userbase}/lib/python{version[0]}.{version[1]}/site-packages'
|
return f'{userbase}/lib/python{version[0]}.{version[1]}/site-packages'
|
||||||
|
|
||||||
|
@ -361,6 +367,8 @@ def getsitepackages(prefixes=None):
|
||||||
continue
|
continue
|
||||||
seen.add(prefix)
|
seen.add(prefix)
|
||||||
|
|
||||||
|
implementation = _get_implementation().lower()
|
||||||
|
ver = sys.version_info
|
||||||
if os.sep == '/':
|
if os.sep == '/':
|
||||||
libdirs = [sys.platlibdir]
|
libdirs = [sys.platlibdir]
|
||||||
if sys.platlibdir != "lib":
|
if sys.platlibdir != "lib":
|
||||||
|
@ -368,7 +376,7 @@ def getsitepackages(prefixes=None):
|
||||||
|
|
||||||
for libdir in libdirs:
|
for libdir in libdirs:
|
||||||
path = os.path.join(prefix, libdir,
|
path = os.path.join(prefix, libdir,
|
||||||
"python%d.%d" % sys.version_info[:2],
|
f"{implementation}{ver[0]}.{ver[1]}",
|
||||||
"site-packages")
|
"site-packages")
|
||||||
sitepackages.append(path)
|
sitepackages.append(path)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -26,24 +26,24 @@
|
||||||
|
|
||||||
_INSTALL_SCHEMES = {
|
_INSTALL_SCHEMES = {
|
||||||
'posix_prefix': {
|
'posix_prefix': {
|
||||||
'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
|
'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
|
'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
'purelib': '{base}/lib/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
|
'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'include':
|
'include':
|
||||||
'{installed_base}/include/python{py_version_short}{abiflags}',
|
'{installed_base}/include/{implementation_lower}{py_version_short}{abiflags}',
|
||||||
'platinclude':
|
'platinclude':
|
||||||
'{installed_platbase}/include/python{py_version_short}{abiflags}',
|
'{installed_platbase}/include/{implementation_lower}{py_version_short}{abiflags}',
|
||||||
'scripts': '{base}/bin',
|
'scripts': '{base}/bin',
|
||||||
'data': '{base}',
|
'data': '{base}',
|
||||||
},
|
},
|
||||||
'posix_home': {
|
'posix_home': {
|
||||||
'stdlib': '{installed_base}/lib/python',
|
'stdlib': '{installed_base}/lib/{implementation_lower}',
|
||||||
'platstdlib': '{base}/lib/python',
|
'platstdlib': '{base}/lib/{implementation_lower}',
|
||||||
'purelib': '{base}/lib/python',
|
'purelib': '{base}/lib/{implementation_lower}',
|
||||||
'platlib': '{base}/lib/python',
|
'platlib': '{base}/lib/{implementation_lower}',
|
||||||
'include': '{installed_base}/include/python',
|
'include': '{installed_base}/include/{implementation_lower}',
|
||||||
'platinclude': '{installed_base}/include/python',
|
'platinclude': '{installed_base}/include/{implementation_lower}',
|
||||||
'scripts': '{base}/bin',
|
'scripts': '{base}/bin',
|
||||||
'data': '{base}',
|
'data': '{base}',
|
||||||
},
|
},
|
||||||
|
@ -75,14 +75,14 @@
|
||||||
# Downstream distributors who patch posix_prefix/nt scheme are encouraged to
|
# Downstream distributors who patch posix_prefix/nt scheme are encouraged to
|
||||||
# leave the following schemes unchanged
|
# leave the following schemes unchanged
|
||||||
'posix_venv': {
|
'posix_venv': {
|
||||||
'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
|
'stdlib': '{installed_base}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
|
'platstdlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
'purelib': '{base}/lib/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
|
'platlib': '{platbase}/{platlibdir}/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'include':
|
'include':
|
||||||
'{installed_base}/include/python{py_version_short}{abiflags}',
|
'{installed_base}/include/{implementation_lower}{py_version_short}{abiflags}',
|
||||||
'platinclude':
|
'platinclude':
|
||||||
'{installed_platbase}/include/python{py_version_short}{abiflags}',
|
'{installed_platbase}/include/{implementation_lower}{py_version_short}{abiflags}',
|
||||||
'scripts': '{base}/bin',
|
'scripts': '{base}/bin',
|
||||||
'data': '{base}',
|
'data': '{base}',
|
||||||
},
|
},
|
||||||
|
@ -104,6 +104,8 @@
|
||||||
else:
|
else:
|
||||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
||||||
|
|
||||||
|
def _get_implementation():
|
||||||
|
return 'Python'
|
||||||
|
|
||||||
# NOTE: site.py has copy of this function.
|
# NOTE: site.py has copy of this function.
|
||||||
# Sync it when modify this function.
|
# Sync it when modify this function.
|
||||||
|
@ -121,7 +123,7 @@ def joinuser(*args):
|
||||||
|
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
base = os.environ.get("APPDATA") or "~"
|
base = os.environ.get("APPDATA") or "~"
|
||||||
return joinuser(base, "Python")
|
return joinuser(base, _get_implementation())
|
||||||
|
|
||||||
if sys.platform == "darwin" and sys._framework:
|
if sys.platform == "darwin" and sys._framework:
|
||||||
return joinuser("~", "Library", sys._framework,
|
return joinuser("~", "Library", sys._framework,
|
||||||
|
@ -135,29 +137,29 @@ def joinuser(*args):
|
||||||
_INSTALL_SCHEMES |= {
|
_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_plat}',
|
'stdlib': '{userbase}/{implementation}{py_version_nodot_plat}',
|
||||||
'platstdlib': '{userbase}/Python{py_version_nodot_plat}',
|
'platstdlib': '{userbase}/{implementation}{py_version_nodot_plat}',
|
||||||
'purelib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
|
'purelib': '{userbase}/{implementation}{py_version_nodot_plat}/site-packages',
|
||||||
'platlib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
|
'platlib': '{userbase}/{implementation}{py_version_nodot_plat}/site-packages',
|
||||||
'include': '{userbase}/Python{py_version_nodot_plat}/Include',
|
'include': '{userbase}/{implementation}{py_version_nodot_plat}/Include',
|
||||||
'scripts': '{userbase}/Python{py_version_nodot_plat}/Scripts',
|
'scripts': '{userbase}/{implementation}{py_version_nodot_plat}/Scripts',
|
||||||
'data': '{userbase}',
|
'data': '{userbase}',
|
||||||
},
|
},
|
||||||
'posix_user': {
|
'posix_user': {
|
||||||
'stdlib': '{userbase}/{platlibdir}/python{py_version_short}',
|
'stdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'platstdlib': '{userbase}/{platlibdir}/python{py_version_short}',
|
'platstdlib': '{userbase}/{platlibdir}/{implementation_lower}{py_version_short}',
|
||||||
'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
|
'purelib': '{userbase}/lib/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
|
'platlib': '{userbase}/lib/{implementation_lower}{py_version_short}/site-packages',
|
||||||
'include': '{userbase}/include/python{py_version_short}',
|
'include': '{userbase}/include/{implementation_lower}{py_version_short}',
|
||||||
'scripts': '{userbase}/bin',
|
'scripts': '{userbase}/bin',
|
||||||
'data': '{userbase}',
|
'data': '{userbase}',
|
||||||
},
|
},
|
||||||
'osx_framework_user': {
|
'osx_framework_user': {
|
||||||
'stdlib': '{userbase}/lib/python',
|
'stdlib': '{userbase}/lib/{implementation_lower}',
|
||||||
'platstdlib': '{userbase}/lib/python',
|
'platstdlib': '{userbase}/lib/{implementation_lower}',
|
||||||
'purelib': '{userbase}/lib/python/site-packages',
|
'purelib': '{userbase}/lib/{implementation_lower}/site-packages',
|
||||||
'platlib': '{userbase}/lib/python/site-packages',
|
'platlib': '{userbase}/lib/{implementation_lower}/site-packages',
|
||||||
'include': '{userbase}/include/python{py_version_short}',
|
'include': '{userbase}/include/{implementation_lower}{py_version_short}',
|
||||||
'scripts': '{userbase}/bin',
|
'scripts': '{userbase}/bin',
|
||||||
'data': '{userbase}',
|
'data': '{userbase}',
|
||||||
},
|
},
|
||||||
|
@ -459,6 +461,8 @@ def _init_config_vars():
|
||||||
_CONFIG_VARS['platbase'] = _EXEC_PREFIX
|
_CONFIG_VARS['platbase'] = _EXEC_PREFIX
|
||||||
_CONFIG_VARS['projectbase'] = _PROJECT_BASE
|
_CONFIG_VARS['projectbase'] = _PROJECT_BASE
|
||||||
_CONFIG_VARS['platlibdir'] = sys.platlibdir
|
_CONFIG_VARS['platlibdir'] = sys.platlibdir
|
||||||
|
_CONFIG_VARS['implementation'] = _get_implementation()
|
||||||
|
_CONFIG_VARS['implementation_lower'] = _get_implementation().lower()
|
||||||
try:
|
try:
|
||||||
_CONFIG_VARS['abiflags'] = sys.abiflags
|
_CONFIG_VARS['abiflags'] = sys.abiflags
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Make hardcoded python name, a configurable parameter so that different implementations of python can override it instead of making huge diffs in sysconfig.py
|
Loading…
Reference in a new issue