[Lldb-commits] [lldb] 6327071 - [lldb] remove usage of distutils, fix python path on debian/ubuntu

Lawrence D'Anna via lldb-commits lldb-commits at lists.llvm.org
Wed Nov 17 13:14:39 PST 2021


Author: Lawrence D'Anna
Date: 2021-11-17T13:14:30-08:00
New Revision: 63270710f13af10808aac980795128db127153f5

URL: https://github.com/llvm/llvm-project/commit/63270710f13af10808aac980795128db127153f5
DIFF: https://github.com/llvm/llvm-project/commit/63270710f13af10808aac980795128db127153f5.diff

LOG: [lldb] remove usage of distutils, fix python path on debian/ubuntu

distutils is deprecated and will be removed, so we shouldn't be
using it.

We were using it to compute LLDB_PYTHON_RELATIVE_PATH.

Discussing a similar issue
[at python.org](https://bugs.python.org/issue41282), Filipe LaĆ­ns said:

    If you are relying on the value of distutils.sysconfig.get_python_lib()
    as you shown in your system, you probably don't want to. That
    directory (dist-packages) should be for Debian provided packages
    only, so moving to sysconfig.get_path() would be a good thing,
    as it has the correct value for user installed packages on your
    system.

So I propose using a relative path from `sys.prefix` to
`sysconfig.get_path("platlib")` instead.

On Mac and windows, this results in the same paths as we had before,
which are `lib/python3.9/site-packages` and `Lib\site-packages`,
respectively.

On ubuntu however, this will change the path from
`lib/python3/dist-packages` to `lib/python3.9/site-packages`.

This change seems to be correct, as Filipe said above, `dist-packages`
belongs to the distribution, not us.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D114106

Added: 
    

Modified: 
    lldb/CMakeLists.txt
    lldb/bindings/python/get-python-config.py

Removed: 
    


################################################################################
diff  --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt
index c45064d9bef23..5c2dac3f51f6d 100644
--- a/lldb/CMakeLists.txt
+++ b/lldb/CMakeLists.txt
@@ -32,9 +32,9 @@ endif()
 
 if (LLDB_ENABLE_PYTHON)
   set(cachestring_LLDB_PYTHON_RELATIVE_PATH
-    "Path where Python modules are installed, relative to install prefix")
+    "Path where Python modules are installed, relative to LLDB's install prefix")
   set(cachestring_LLDB_PYTHON_EXE_RELATIVE_PATH
-    "Path to python interpreter exectuable, relative to install prefix")
+    "Path to python interpreter exectuable, relative to python's install prefix")
   set(cachestring_LLDB_PYTHON_EXT_SUFFIX
     "Filename extension for native code python modules")
 

diff  --git a/lldb/bindings/python/get-python-config.py b/lldb/bindings/python/get-python-config.py
index 978dc07b3e4c0..5b670d77451a3 100755
--- a/lldb/bindings/python/get-python-config.py
+++ b/lldb/bindings/python/get-python-config.py
@@ -4,7 +4,6 @@
 import sys
 import argparse
 import sysconfig
-import distutils.sysconfig
 
 
 def relpath_nodots(path, base):
@@ -20,7 +19,18 @@ def main():
     parser.add_argument("variable_name")
     args = parser.parse_args()
     if args.variable_name == "LLDB_PYTHON_RELATIVE_PATH":
-        print(distutils.sysconfig.get_python_lib(True, False, ''))
+        # LLDB_PYTHON_RELATIVE_PATH is the relative path from lldb's prefix
+        # to where lldb's python libraries will be installed.
+        #
+        # The way we're going to compute this is to take the relative path from
+        # PYTHON'S prefix to where python libraries are supposed to be
+        # installed.
+        #
+        # The result is if LLDB and python are give the same prefix, then
+        # lldb's python lib will be put in the correct place for python to find it.
+        # If not, you'll have to use lldb -P or lldb -print-script-interpreter-info
+        # to figure out where it is.
+        print(relpath_nodots(sysconfig.get_path("platlib"), sys.prefix))
     elif args.variable_name == "LLDB_PYTHON_EXE_RELATIVE_PATH":
         tried = list()
         exe = sys.executable


        


More information about the lldb-commits mailing list