1

As distutils is being removed from Python in the > 3.10 versions, and setuptools will not be added to the stdlib, I want to replace an existing setup.py recipe for building/installing a C++ library Cython extension (i.e. not primarily a Python package, not run in a venv, etc.) with some custom code.

The Cython part is working fine, and I just about managed to construct an equivalent call to the C++ compiler from that previously executed by distutils, by using config-var info from sysconfig... though the latter was very trial and error, with no documentation or particular consistency to the config-var collection as far as I could tell.

But I am now stuck on identifying what directory to install my build extension .so into, within the target prefix of my build. Depending on the platform and path scheme in use, and the prefix itself, the subdirs could be in lib or lib64, a pythonX.Y subdir of some sort, and a final site-packages, dist-packages or other directory. This decision was previously made by distutils but I can't find any equivalent code to return such path decisions in other stdlib packages.

Any suggestions of answers or best-practice approaches? (Other than "use setuptools", please!)

7
  • It's all in sysconfig as far as I know. Commented May 10, 2022 at 17:34
  • Does this answer your question? Programmatically determine pip 'user install' location Scripts directory Commented May 10, 2022 at 17:36
  • But in general, you should let pip install things in the right places. Can you build wheels of your library? Commented May 10, 2022 at 17:39
  • Unfortunately sysconfig doesn't replicate all the features of distutils.sysconfig: in particular the get_python_lib() function, which accepted a prefix kwarg, is not replicated by the sysconfig.get_path("platlib") call (as suggested in msg393018 of the issue used to manage the distutils removal: bugs.python.org/issue41282 ) Prefix-specific path calculations seem to have been left out. Commented May 12, 2022 at 6:39
  • 1
    distutils is not removed yet. It is scheduled to be removed in Python 3.12. -- Is there anything in PEP 632 that can help you find alternatives for the distutils functions you need? -- You can always copy-paste the distutils code you need into your own setup.py. -- Somehow I had in mind that distutils had been extracted to a package on PyPI, but maybe you do not want that anymore than installing setuptools. -- Otherwise I would suggest asking the question on the packaging category of Python Discuss form. Commented May 12, 2022 at 10:27

1 Answer 1

1

This worked for me:

from sysconfig import get_path
get_path('platlib', 'posix_user', {'userbase': '/prefix/path/'})

I used it in a CMakeLists.txt with ${CMAKE_INSTALL_DIR} for the path.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.