Skip to content

Commit

Permalink
Load install schemes from sysconfig
Browse files Browse the repository at this point in the history
  • Loading branch information
frenzymadness committed Apr 2, 2021
1 parent 8bbfeb3 commit 04346fd
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 38 deletions.
73 changes: 41 additions & 32 deletions Lib/distutils/command/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
Implements the Distutils 'install' command."""

import sys
import sysconfig
import os
import re

from distutils import log
from distutils.core import Command
Expand All @@ -20,33 +22,45 @@

HAS_USER_SITE = (USER_SITE is not None)

WINDOWS_SCHEME = {
'purelib': '$base/Lib/site-packages',
'platlib': '$base/Lib/site-packages',
'headers': '$base/Include/$dist_name',
'scripts': '$base/Scripts',
'data' : '$base',
}

INSTALL_SCHEMES = {
'unix_prefix': {
'purelib': '$base/lib/python$py_version_short/site-packages',
'platlib': '$platbase/$platlibdir/python$py_version_short/site-packages',
'headers': '$base/include/python$py_version_short$abiflags/$dist_name',
'scripts': '$base/bin',
'data' : '$base',
},
'unix_home': {
'purelib': '$base/lib/python',
'platlib': '$base/$platlibdir/python',
'headers': '$base/include/python/$dist_name',
'scripts': '$base/bin',
'data' : '$base',
},
'nt': WINDOWS_SCHEME,
}

# user site schemes
# The keys to an installation scheme; if any new types of files are to be
# installed, be sure to add an entry to every installation scheme above,
# and to SCHEME_KEYS here.
SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data')

# The following code provides backward-compatible INSTALL_SCHEMES
# while making the sysconfig module the single point of truth.
# This makes it easier for OS distributions where they need to
# alter locations for packages installations on single place.
# This module is depracated anyway (PEP 632) so if anything
# doesn't work for you, take a look at sysconfig.
INSTALL_SCHEMES = {"unix_prefix": {}, "unix_home": {}, "nt": {}}

# Copy from sysconfig._INSTALL_SCHEMES
for key in SCHEME_KEYS:
sys_key = key
if key == "headers":
sys_key = "include"
INSTALL_SCHEMES["unix_prefix"][key] = sysconfig._INSTALL_SCHEMES["posix_prefix"][sys_key]
INSTALL_SCHEMES["unix_home"][key] = sysconfig._INSTALL_SCHEMES["posix_home"][sys_key]
INSTALL_SCHEMES["nt"][key] = sysconfig._INSTALL_SCHEMES["nt"][sys_key]

# Transformation to different template format
for main_key in INSTALL_SCHEMES:
for key, value in INSTALL_SCHEMES[main_key].items():
# Change all ocurences of {variable} to $variable
value = re.sub(r"\{(.+?)\}", r"$\g<1>", value)
value = value.replace("$installed_base", "$base")
value = value.replace("$py_version_nodot_plat", "$py_version_nodot")
if key == "headers":
value += "/$dist_name"
if sys.version_info >= (3, 9) and key == "platlib":
# platlibdir is available since 3.9: bpo-1294959
value = value.replace("/lib/", "/$platlibdir/")
INSTALL_SCHEMES[main_key][key] = value

# The following part of INSTALL_SCHEMES has different definition
# that the one in sysconfig but because both depends on site module
# the outcomes should be the same.
if HAS_USER_SITE:
INSTALL_SCHEMES['nt_user'] = {
'purelib': '$usersite',
Expand All @@ -65,11 +79,6 @@
'data' : '$userbase',
}

# The keys to an installation scheme; if any new types of files are to be
# installed, be sure to add an entry to every installation scheme above,
# and to SCHEME_KEYS here.
SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data')


class install(Command):

Expand Down
6 changes: 0 additions & 6 deletions Lib/sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,6 @@ def is_python_build(check_home=False):

_PYTHON_BUILD = is_python_build(True)

if _PYTHON_BUILD:
for scheme in ('posix_prefix', 'posix_home'):
_INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include'
_INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.'


def _subst_vars(s, local_vars):
try:
return s.format(**local_vars)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Install schemes in :mod:`distutils.command.install` are now loaded from
:mod:`sysconfig`.

0 comments on commit 04346fd

Please sign in to comment.