gh-139707: Add docs for optional modules (GH-140171)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Emma Smith <emma@emmatyping.dev>
Co-authored-by: Author: Terry Jan Reedy <tjreedy@udel.edu>
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Petr Viktorin 2025-11-06 11:49:44 +01:00 committed by GitHub
parent 86ab7bb87a
commit d2ce6d708a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 221 additions and 82 deletions

View file

@ -4,10 +4,13 @@ Configure Python
.. highlight:: sh
.. _build-requirements:
Build Requirements
==================
Features and minimum versions required to build CPython:
To build CPython, you will need:
* A `C11 <https://en.cppreference.com/w/c/11>`_ compiler. `Optional C11
features
@ -22,85 +25,138 @@ Features and minimum versions required to build CPython:
* Support for threads.
To build optional modules:
* `libbz2 <https://sourceware.org/bzip2/>`_ for the :mod:`bz2` module.
* `libb2 <https://github.com/BLAKE2/libb2>`_ (:ref:`BLAKE2 <hashlib-blake2>`)
for the :mod:`hashlib` module.
* `libffi <https://sourceware.org/libffi/>`_ 3.3.0 is the recommended
minimum version for the :mod:`ctypes` module.
* ``liblzma`` for the :mod:`lzma` module.
* `libmpdec <https://www.bytereef.org/mpdecimal/doc/libmpdec/>`_ 2.5.0
for the :mod:`decimal` module.
* ``libncurses`` or ``libncursesw`` for the :mod:`curses` module.
* ``libpanel`` or ``libpanelw`` for the :mod:`curses.panel` module.
* `libreadline <https://tiswww.case.edu/php/chet/readline/rltop.html>`_ or
`libedit <https://www.thrysoee.dk/editline/>`_
for the :mod:`readline` module.
* `libuuid <https://linux.die.net/man/3/libuuid>`_ for the :mod:`uuid` module.
* `OpenSSL <https://www.openssl.org/>`_ 1.1.1 is the minimum version and
OpenSSL 3.0.18 is the recommended minimum version for the
:mod:`ssl` and :mod:`hashlib` extension modules.
* `SQLite <https://sqlite.org/>`_ 3.15.2 for the :mod:`sqlite3` extension module.
* `Tcl/Tk <https://www.tcl-lang.org/>`_ 8.5.12 for the :mod:`tkinter` module.
* `zlib <https://www.zlib.net>`_ 1.2.2.1 is the minimum version for the
:mod:`zlib` module.
* `zstd <https://facebook.github.io/zstd/>`_ 1.4.5 is the minimum version for
the :mod:`compression.zstd` module.
For a full list of dependencies required to build all modules and how to install
them, see the
`devguide <https://devguide.python.org/getting-started/setup-building/#install-dependencies>`_.
* Autoconf 2.72 and aclocal 1.16.5 are required to regenerate the
:file:`configure` script.
.. versionchanged:: 3.1
Tcl/Tk version 8.3.1 is now required.
.. versionchanged:: 3.5
On Windows, Visual Studio 2015 or later is now required.
Tcl/Tk version 8.4 is now required.
.. versionchanged:: 3.6
Selected C99 features are now required, like ``<stdint.h>`` and ``static
inline`` functions.
Selected C99 features, like ``<stdint.h>`` and ``static inline`` functions,
are now required.
.. versionchanged:: 3.7
Thread support and OpenSSL 1.0.2 are now required.
.. versionchanged:: 3.10
OpenSSL 1.1.1 is now required.
Require SQLite 3.7.15.
Thread support is now required.
.. versionchanged:: 3.11
C11 compiler, IEEE 754 and NaN support are now required.
On Windows, Visual Studio 2017 or later is required.
Tcl/Tk version 8.5.12 is now required for the :mod:`tkinter` module.
.. versionchanged:: 3.13
Autoconf 2.71, aclocal 1.16.5 and SQLite 3.15.2 are now required.
.. versionchanged:: 3.14
Autoconf 2.72 is now required.
See also :pep:`7` "Style Guide for C Code" and :pep:`11` "CPython platform
support".
.. _optional-module-requirements:
Requirements for optional modules
---------------------------------
Some :term:`optional modules <optional module>` of the standard library
require third-party libraries installed for development
(for example, header files must be available).
Missing requirements are reported in the ``configure`` output.
Modules that are missing due to missing dependencies are listed near the end
of the ``make`` output,
sometimes using an internal name, for example, ``_ctypes`` for :mod:`ctypes`
module.
If you distribute a CPython interpreter without optional modules,
it's best practice to advise users, who generally expect that
standard library modules are available.
Dependencies to build optional modules are:
.. list-table::
:header-rows: 1
:align: left
* - Dependency
- Minimum version
- Python module
* - `libbz2 <https://sourceware.org/bzip2/>`_
-
- :mod:`bz2`
* - `libffi <https://sourceware.org/libffi/>`_
- 3.3.0 recommended
- :mod:`ctypes`
* - `liblzma <https://tukaani.org/xz/>`_
-
- :mod:`lzma`
* - `libmpdec <https://www.bytereef.org/mpdecimal/doc/libmpdec/>`_
- 2.5.0
- :mod:`decimal` [1]_
* - `libreadline <https://tiswww.case.edu/php/chet/readline/rltop.html>`_ or
`libedit <https://www.thrysoee.dk/editline/>`_ [2]_
-
- :mod:`readline`
* - `libuuid <https://linux.die.net/man/3/libuuid>`_
-
- ``_uuid`` [3]_
* - `ncurses <https://gnu.org/software/ncurses/ncurses.html>`_ [4]_
-
- :mod:`curses`
* - `OpenSSL <https://openssl-library.org/>`_
- | 3.0.18 recommended
| (1.1.1 minimum)
- :mod:`ssl`, :mod:`hashlib` [5]_
* - `SQLite <https://sqlite.org/>`_
- 3.15.2
- :mod:`sqlite3`
* - `Tcl/Tk <https://www.tcl-lang.org/>`_
- 8.5.12
- :mod:`tkinter`, :ref:`IDLE <idle>`, :mod:`turtle`
* - `zlib <https://www.zlib.net>`_
- 1.2.2.1
- :mod:`zlib`, :mod:`gzip`, :mod:`ensurepip`
* - `zstd <https://facebook.github.io/zstd/>`_
- 1.4.5
- :mod:`compression.zstd`
.. [1] If *libmpdec* is not available, the :mod:`decimal` module will use
a pure-Python implementation.
See :option:`--with-system-libmpdec` for details.
.. [2] See :option:`--with-readline` for choosing the backend for the
:mod:`readline` module.
.. [3] The :mod:`uuid` module uses ``_uuid`` to generate "safe" UUIDs.
See the module documentation for details.
.. [4] The :mod:`curses` module requires the ``libncurses`` or ``libncursesw``
library.
The :mod:`curses.panel` module additionally requires the ``libpanel`` or
``libpanelw`` library.
.. [5] If OpenSSL is not available, the :mod:`hashlib` module will use
bundled implementations of several hash functions.
See :option:`--with-builtin-hashlib-hashes` for *forcing* usage of OpenSSL.
Note that the table does not include all optional modules; in particular,
platform-specific modules like :mod:`winreg` are not listed here.
.. seealso::
* The `devguide <https://devguide.python.org/getting-started/setup-building/#install-dependencies>`_
includes a full list of dependencies required to build all modules and
instructions on how to install them on common platforms.
* :option:`--with-system-expat` allows building with an external
`libexpat <https://libexpat.github.io/>`_ library.
* :ref:`configure-options-for-dependencies`
.. versionchanged:: 3.1
Tcl/Tk version 8.3.1 is now required for :mod:`tkinter`.
.. versionchanged:: 3.5
Tcl/Tk version 8.4 is now required for :mod:`tkinter`.
.. versionchanged:: 3.7
OpenSSL 1.0.2 is now required for :mod:`hashlib` and :mod:`ssl`.
.. versionchanged:: 3.10
OpenSSL 1.1.1 is now required for :mod:`hashlib` and :mod:`ssl`.
SQLite 3.7.15 is now required for :mod:`sqlite3`.
.. versionchanged:: 3.11
Tcl/Tk version 8.5.12 is now required for :mod:`tkinter`.
.. versionchanged:: 3.13
SQLite 3.15.2 is now required for :mod:`sqlite3`.
Generated files
===============
@ -127,8 +183,19 @@ The container is optional, the following command can be run locally::
autoreconf -ivf -Werror
The generated files can change depending on the exact ``autoconf-archive``,
``aclocal`` and ``pkg-config`` versions.
The generated files can change depending on the exact versions of the
tools used.
The container that CPython uses has
`Autoconf <https://gnu.org/software/autoconf>`_ 2.72,
``aclocal`` from `Automake <https://www.gnu.org/software/automake>`_ 1.16.5,
and `pkg-config <https://www.freedesktop.org/wiki/Software/pkg-config/>`_ 1.8.1.
.. versionchanged:: 3.13
Autoconf 2.71 and aclocal 1.16.5 and are now used to regenerate
:file:`configure`.
.. versionchanged:: 3.14
Autoconf 2.72 is now used to regenerate :file:`configure`.
.. _configure-options:
@ -409,6 +476,8 @@ Linker options
Name for machine-dependent library files.
.. _configure-options-for-dependencies:
Options for third-party dependencies
------------------------------------
@ -431,12 +500,6 @@ Options for third-party dependencies
C compiler and linker flags for ``gdbm``.
.. option:: LIBB2_CFLAGS
.. option:: LIBB2_LIBS
C compiler and linker flags for ``libb2`` (:ref:`BLAKE2 <hashlib-blake2>`),
used by :mod:`hashlib` module, overriding ``pkg-config``.
.. option:: LIBEDIT_CFLAGS
.. option:: LIBEDIT_LIBS
@ -902,6 +965,13 @@ Libraries options
.. versionchanged:: 3.13
Default to using the installed ``mpdecimal`` library.
.. versionchanged:: 3.15
A bundled copy of the library will no longer be selected
implicitly if an installed ``mpdecimal`` library is not found.
In Python 3.15 only, it can still be selected explicitly using
``--with-system-libmpdec=no`` or ``--without-system-libmpdec``.
.. deprecated-removed:: 3.13 3.16
A copy of the ``mpdecimal`` library sources will no longer be distributed
with Python 3.16.

View file

@ -84,11 +84,17 @@ On FreeBSD and OpenBSD
Building Python
===============
.. seealso::
If you want to contribute to CPython, refer to the
`devguide <https://devguide.python.org/getting-started/setup-building/>`_,
which includes build instructions and other tips on setting up environment.
If you want to compile CPython yourself, first thing you should do is get the
`source <https://www.python.org/downloads/source/>`_. You can download either the
latest release's source or just grab a fresh `clone
<https://devguide.python.org/setup/#get-the-source-code>`_. (If you want
to contribute patches, you will need a clone.)
latest release's source or grab a fresh `clone
<https://devguide.python.org/setup/#get-the-source-code>`_.
You will also need to install the :ref:`build requirements <build-requirements>`.
The build process consists of the usual commands::