Skip to content

Commit

Permalink
Merge pull request #424 from ryanvolz/distutils-deprecation
Browse files Browse the repository at this point in the history
Remove deprecated use of distutils, fix for Python 3.12+
  • Loading branch information
guruofquality authored Apr 8, 2024
2 parents bb33b2d + 1ee5670 commit efdc776
Showing 1 changed file with 25 additions and 11 deletions.
36 changes: 25 additions & 11 deletions swig/python/get_python_lib.py
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit efdc776

Please # to comment.