mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
bpo-45413: Define "posix_venv", "nt_venv" and "venv" sysconfig installation schemes (GH-31034)
Define *posix_venv* and *nt_venv* sysconfig installation schemes to be used for bootstrapping new virtual environments. Add *venv* sysconfig installation scheme to get the appropriate one of the above. The schemes are identical to the pre-existing *posix_prefix* and *nt* install schemes. The venv module now uses the *venv* scheme to create new virtual environments instead of hardcoding the paths depending only on the platform. Downstream Python distributors customizing the *posix_prefix* or *nt* install scheme in a way that is not compatible with the install scheme used in virtual environments are encouraged not to customize the *venv* schemes. When Python itself runs in a virtual environment, sysconfig.get_default_scheme and sysconfig.get_preferred_scheme with `key="prefix"` returns *venv*.
This commit is contained in:
parent
cd44afc573
commit
48d9262699
8 changed files with 211 additions and 16 deletions
|
|
@ -56,8 +56,53 @@ _INSTALL_SCHEMES = {
|
|||
'scripts': '{base}/Scripts',
|
||||
'data': '{base}',
|
||||
},
|
||||
# Downstream distributors can overwrite the default install scheme.
|
||||
# This is done to support downstream modifications where distributors change
|
||||
# the installation layout (eg. different site-packages directory).
|
||||
# So, distributors will change the default scheme to one that correctly
|
||||
# represents their layout.
|
||||
# This presents an issue for projects/people that need to bootstrap virtual
|
||||
# environments, like virtualenv. As distributors might now be customizing
|
||||
# the default install scheme, there is no guarantee that the information
|
||||
# returned by sysconfig.get_default_scheme/get_paths is correct for
|
||||
# a virtual environment, the only guarantee we have is that it is correct
|
||||
# for the *current* environment. When bootstrapping a virtual environment,
|
||||
# we need to know its layout, so that we can place the files in the
|
||||
# correct locations.
|
||||
# The "*_venv" install scheme is a scheme to bootstrap virtual environments,
|
||||
# essentially identical to the default posix_prefix/nt schemes.
|
||||
# Downstream distributors who patch posix_prefix/nt scheme are encouraged to
|
||||
# leave the following schemes unchanged
|
||||
'posix_venv': {
|
||||
'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
|
||||
'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
|
||||
'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
||||
'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
|
||||
'include':
|
||||
'{installed_base}/include/python{py_version_short}{abiflags}',
|
||||
'platinclude':
|
||||
'{installed_platbase}/include/python{py_version_short}{abiflags}',
|
||||
'scripts': '{base}/bin',
|
||||
'data': '{base}',
|
||||
},
|
||||
'nt_venv': {
|
||||
'stdlib': '{installed_base}/Lib',
|
||||
'platstdlib': '{base}/Lib',
|
||||
'purelib': '{base}/Lib/site-packages',
|
||||
'platlib': '{base}/Lib/site-packages',
|
||||
'include': '{installed_base}/Include',
|
||||
'platinclude': '{installed_base}/Include',
|
||||
'scripts': '{base}/Scripts',
|
||||
'data': '{base}',
|
||||
},
|
||||
}
|
||||
|
||||
# For the OS-native venv scheme, we essentially provide an alias:
|
||||
if os.name == 'nt':
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv']
|
||||
else:
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
||||
|
||||
|
||||
# NOTE: site.py has copy of this function.
|
||||
# Sync it when modify this function.
|
||||
|
|
@ -251,6 +296,8 @@ def _get_preferred_schemes():
|
|||
|
||||
|
||||
def get_preferred_scheme(key):
|
||||
if key == 'prefix' and sys.prefix != sys.base_prefix:
|
||||
return 'venv'
|
||||
scheme = _get_preferred_schemes()[key]
|
||||
if scheme not in _INSTALL_SCHEMES:
|
||||
raise ValueError(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue