12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- From 1ee5670803f89b21d84a6a84acbb578da051c119 Mon Sep 17 00:00:00 2001
- From: Ryan Volz <ryan.volz@gmail.com>
- Date: Tue, 26 Sep 2023 14:56:59 -0400
- Subject: [PATCH] Remove deprecated use of distutils, fix for Python 3.12+
- Remove deprecated use of distutils, fix for Python 3.12+
- This switches to using sysconfig from distutils, which is necessary for
- Python 3.12+ since distutils is deprecated and has been removed.
- It is necessary to specify the install scheme when a prefix other than
- the Python default is used so that changes to the default scheme made by
- distributions (e.g. Debian, Fedora) do not produce an incorrect Python
- installation directory. For example, Debian patches the default scheme
- to prepend the path with '/local', but if a user specifies a prefix of
- '/usr/local', then the path using the default scheme would be
- '/usr/local/local/...' with a duplicated 'local' directory. Specifying
- an unmodified install scheme fixes that.
- Signed-off-by: Ryan Volz <ryan.volz@gmail.com>
- Upstream: https://github.com/pothosware/SoapySDR/commit/1ee5670803f89b21d84a6a84acbb578da051c119
- Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
- ---
- swig/python/get_python_lib.py | 36 ++++++++++++++++++++++++-----------
- 1 file changed, 25 insertions(+), 11 deletions(-)
- diff --git a/python/get_python_lib.py b/python/get_python_lib.py
- index 0c71652..574f0b6 100644
- --- a/python/get_python_lib.py
- +++ b/python/get_python_lib.py
- @@ -1,19 +1,33 @@
- import os
- +import pathlib
- import sys
- -import site
- -from distutils.sysconfig import get_python_lib
- +import sysconfig
-
- if __name__ == '__main__':
- - prefix = sys.argv[1]
- + prefix = pathlib.Path(sys.argv[1]).resolve()
-
- - #ask distutils where to install the python module
- - install_dir = get_python_lib(plat_specific=True, prefix=prefix)
- + # default install dir for the running Python interpreter
- + default_install_dir = pathlib.Path(sysconfig.get_path('platlib')).resolve()
-
- - #use sites when the prefix is already recognized
- + # if default falls under the desired prefix, we're done
- try:
- - paths = [p for p in site.getsitepackages() if p.startswith(prefix)]
- - if len(paths) == 1: install_dir = paths[0]
- - except AttributeError: pass
- + relative_install_dir = default_install_dir.relative_to(prefix)
- + except ValueError:
- + # get install dir for the specified prefix
- + # can't use the default scheme because distributions modify it
- + # newer Python versions have 'venv' scheme, use for all OSs.
- + if 'venv' in sysconfig.get_scheme_names():
- + scheme = 'venv'
- + elif os.name == 'nt':
- + scheme = 'nt'
- + else:
- + scheme = 'posix_prefix'
- + prefix_install_dir = pathlib.Path(sysconfig.get_path(
- + 'platlib',
- + scheme=scheme,
- + vars={'base': prefix, 'platbase': prefix},
- + )).resolve()
- + relative_install_dir = prefix_install_dir.relative_to(prefix)
-
- - #strip the prefix to return a relative path
- - print(os.path.relpath(install_dir, prefix))
- + # want a relative path for use in the build system
- + print(relative_install_dir)
- --
- 2.49.0
|