New sysconfig API: Build information - Compilation · Issue #103482 · python/cpython (original) (raw)
Navigation Menu
- Explore
- Pricing
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Appearance settings
Description
Feature or enhancement
sysconfig
should export all the information required to build extensions.
Pitch
The new API should try to expose the information in a compiler-agnostic way.
Information to expose
- Python version
- currently:
sys.version_info
- currently:
- Interpreter version
- currently:
sys.implementation
- currently:
- Extension suffixes
- definition: See PEP 3149
* consideration: PEP 3149 only defines the names for POSIX
* Windows and other platforms still seem to follow it mostly (refer to packaging.tags's implementation)
* Windows
* design: The API should identify the different extensions types (interpreter, stable abi, none) - currently:
importlib.machinery.EXTENSION_SUFFIXES
,sysconfig.get_config_var('EXT_SUFFIX')
,sysconfig.get_config_var('SHLIB_SUFFIX')
- definition: See PEP 3149
- Is a shared
libpython
available? What's its name? Location?- definition: Yes if built with
--enable-shared
- currently:
* (available?)bool(sysconfig.get_config_var('LDLIBRARY'))
* (name?)sysconfig.get_config_var('LDLIBRARY')
* (location?)sysconfig.get_config_var('LIBDIR')
- definition: Yes if built with
- Is a static
libpython
available? What's its name? Location?- definition: Yes unless built with
--without-static-libpython
- currently:
* (available?)bool(sysconfig.get_config_var('LIBRARY'))
* (name?)sysconfig.get_config_var('LIBRARY')
* (location?)sysconfig.get_config_var('LIBDIR')
- definition: Yes unless built with
- Should extensions link against
libpython
?- definition: Yes on Android and Cygwin, no everywhere else (see extension built with a shared python cannot be loaded with a static python #65735)
- currently:
bool(sysconfig.get_config_var('LIBPYTHON'))
- Is it a debug build?
- definition: Yes if built with
--with-pydebug
- currently:
bool(sysconfig.get_config_var('Py_DEBUG'))
- definition: Yes if built with
- C flags needed when using the C API
- definition:
*-fwrapv
(until Enable -fstrict-overflow #96821)
* Currently, we have unsafe code, and for a lack of a better option we assume it made into C macros, so extensions that use the C API should use-fwrapv
.
- definition:
- what else? please comment...
"definition" sections list the answer, if a question, or the value(s) of the item. "currently" sections list the current way of fetching the information.
This is list is a work in progress. Currently, we need to gather all the information that is required to build extensions. If you see anything that's missing, please comment!
Previous discussion
https://discuss.python.org/t/building-extensions-modules-in-a-post-distutils-world/23938
https://discuss.python.org/t/what-information-is-useful-to-know-statically-about-an-interpreter/25563
https://gregoryszorc.com/docs/python-build-standalone/20230116/distributions.html
New sysconfig
API meta-issue: GH-103480