https://github.com/python/cpython/commit/d2ce6d708a9eaac4e546744ca4da359ee6901ebc
commit: d2ce6d708a9eaac4e546744ca4da359ee6901ebc
branch: main
author: Petr Viktorin <[email protected]>
committer: encukou <[email protected]>
date: 2025-11-06T11:49:44+01:00
summary:

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


Co-authored-by: Stan Ulbrych <[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Emma Smith <[email protected]>
Co-authored-by: Author: Terry Jan Reedy <[email protected]>
Co-authored-by: Victor Stinner <[email protected]>

files:
A Doc/includes/optional-module.rst
M Doc/glossary.rst
M Doc/library/bz2.rst
M Doc/library/compression.zstd.rst
M Doc/library/ctypes.rst
M Doc/library/curses.rst
M Doc/library/ensurepip.rst
M Doc/library/gzip.rst
M Doc/library/idle.rst
M Doc/library/lzma.rst
M Doc/library/readline.rst
M Doc/library/sqlite3.rst
M Doc/library/ssl.rst
M Doc/library/tarfile.rst
M Doc/library/tkinter.rst
M Doc/library/turtle.rst
M Doc/library/zipfile.rst
M Doc/library/zlib.rst
M Doc/using/configure.rst
M Doc/using/unix.rst

diff --git a/Doc/glossary.rst b/Doc/glossary.rst
index c0ca0be304ebe4..a4066d42927f64 100644
--- a/Doc/glossary.rst
+++ b/Doc/glossary.rst
@@ -1025,6 +1025,15 @@ Glossary
       applied to all scopes, only those relying on a known set of local
       and nonlocal variable names are restricted to optimized scopes.
 
+   optional module
+      An :term:`extension module` that is part of the :term:`standard library`,
+      but may be absent in some builds of :term:`CPython`,
+      usually due to missing third-party libraries or because the module
+      is not available for a given platform.
+
+      See :ref:`optional-module-requirements` for a list of optional modules
+      that require third-party libraries.
+
    package
       A Python :term:`module` which can contain submodules or recursively,
       subpackages.  Technically, a package is a Python module with a
diff --git a/Doc/includes/optional-module.rst b/Doc/includes/optional-module.rst
new file mode 100644
index 00000000000000..262e73f2eaa09f
--- /dev/null
+++ b/Doc/includes/optional-module.rst
@@ -0,0 +1,9 @@
+This is an :term:`optional module`.
+If it is missing from your copy of CPython,
+look for documentation from your distributor (that is,
+whoever provided Python to you).
+If you are the distributor, see :ref:`optional-module-requirements`.
+
+.. Similar notes appear in the docs of the modules:
+   - zipfile
+   - tarfile
diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst
index ebe2e43febaefa..12650861c0fb5d 100644
--- a/Doc/library/bz2.rst
+++ b/Doc/library/bz2.rst
@@ -25,6 +25,8 @@ The :mod:`bz2` module contains:
 * The :func:`compress` and :func:`decompress` functions for one-shot
   (de)compression.
 
+.. include:: ../includes/optional-module.rst
+
 
 (De)compression of files
 ------------------------
diff --git a/Doc/library/compression.zstd.rst b/Doc/library/compression.zstd.rst
index a901403621b84f..89b6fe540f5ba7 100644
--- a/Doc/library/compression.zstd.rst
+++ b/Doc/library/compression.zstd.rst
@@ -33,6 +33,8 @@ The :mod:`!compression.zstd` module contains:
 * The :class:`CompressionParameter`, :class:`DecompressionParameter`, and
   :class:`Strategy` classes for setting advanced (de)compression parameters.
 
+.. include:: ../includes/optional-module.rst
+
 
 Exceptions
 ----------
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index d8dac24c8ab532..9c0b246c095483 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -14,6 +14,8 @@
 data types, and allows calling functions in DLLs or shared libraries.  It can 
be
 used to wrap these libraries in pure Python.
 
+.. include:: ../includes/optional-module.rst
+
 
 .. _ctypes-ctypes-tutorial:
 
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index e60197ddd89adb..057d338edda92a 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -23,6 +23,8 @@ Linux and the BSD variants of Unix.
 
 .. include:: ../includes/wasm-mobile-notavail.rst
 
+.. include:: ../includes/optional-module.rst
+
 .. note::
 
    Whenever the documentation mentions a *character* it can be specified
diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst
index fa102c4a080103..165b9a9f823154 100644
--- a/Doc/library/ensurepip.rst
+++ b/Doc/library/ensurepip.rst
@@ -30,6 +30,8 @@ when creating a virtual environment) or after explicitly 
uninstalling
    needed to bootstrap ``pip`` are included as internal parts of the
    package.
 
+.. include:: ../includes/optional-module.rst
+
 .. seealso::
 
    :ref:`installing-index`
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 4bdcec66088db2..cb36be42a83f12 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -11,6 +11,8 @@
 This module provides a simple interface to compress and decompress files just
 like the GNU programs :program:`gzip` and :program:`gunzip` would.
 
+.. include:: ../includes/optional-module.rst
+
 The data compression is provided by the :mod:`zlib` module.
 
 The :mod:`gzip` module provides the :class:`GzipFile` class, as well as the
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index 10ec7f0a6f14c9..52e3726a0f5af5 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -37,6 +37,10 @@ IDLE has the following features:
 
 * configuration, browsers, and other dialogs
 
+The IDLE application is implemented in the :mod:`idlelib` package.
+
+.. include:: ../includes/optional-module.rst
+
 Menus
 -----
 
diff --git a/Doc/library/lzma.rst b/Doc/library/lzma.rst
index 69f7cb8d48d7ae..8a4f68f3502521 100644
--- a/Doc/library/lzma.rst
+++ b/Doc/library/lzma.rst
@@ -23,6 +23,8 @@ module. Note that :class:`LZMAFile` and :class:`bz2.BZ2File` 
are *not*
 thread-safe, so if you need to use a single :class:`LZMAFile` instance
 from multiple threads, it is necessary to protect it with a lock.
 
+.. include:: ../includes/optional-module.rst
+
 
 .. exception:: LZMAError
 
diff --git a/Doc/library/readline.rst b/Doc/library/readline.rst
index f649fce5efc377..75db832c546b64 100644
--- a/Doc/library/readline.rst
+++ b/Doc/library/readline.rst
@@ -26,6 +26,8 @@ Readline library in general.
 
 .. include:: ../includes/wasm-mobile-notavail.rst
 
+.. include:: ../includes/optional-module.rst
+
 .. note::
 
   The underlying Readline library API may be implemented by
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst
index 9d56e81dee10d5..3b1a9c2f6eefe9 100644
--- a/Doc/library/sqlite3.rst
+++ b/Doc/library/sqlite3.rst
@@ -31,7 +31,9 @@ PostgreSQL or Oracle.
 
 The :mod:`!sqlite3` module was written by Gerhard Häring.  It provides an SQL 
interface
 compliant with the DB-API 2.0 specification described by :pep:`249`, and
-requires SQLite 3.15.2 or newer.
+requires the third-party `SQLite <https://sqlite.org/>`_ library.
+
+.. include:: ../includes/optional-module.rst
 
 This document includes four main sections:
 
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index e0d85c852fa655..fa0a5234720422 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -18,8 +18,9 @@
 This module provides access to Transport Layer Security (often known as "Secure
 Sockets Layer") encryption and peer authentication facilities for network
 sockets, both client-side and server-side.  This module uses the OpenSSL
-library. It is available on all modern Unix systems, Windows, macOS, and
-probably additional platforms, as long as OpenSSL is installed on that 
platform.
+library.
+
+.. include:: ../includes/optional-module.rst
 
 .. note::
 
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index c4614bf28a4aea..5ff8502bbe219f 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -21,6 +21,14 @@ Some facts and figures:
 * reads and writes :mod:`gzip`, :mod:`bz2`, :mod:`compression.zstd`, and
   :mod:`lzma` compressed archives if the respective modules are available.
 
+  ..
+     The following paragraph should be similar to 
../includes/optional-module.rst
+
+  If any of these :term:`optional modules <optional module>` are missing from
+  your copy of CPython, look for documentation from your distributor (that is,
+  whoever provided Python to you).
+  If you are the distributor, see :ref:`optional-module-requirements`.
+
 * read/write support for the POSIX.1-1988 (ustar) format.
 
 * read/write support for the GNU tar format including *longname* and *longlink*
diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst
index 22e08c45d01ef9..81177533be84c9 100644
--- a/Doc/library/tkinter.rst
+++ b/Doc/library/tkinter.rst
@@ -36,6 +36,8 @@ details that are unchanged.
    Most documentation you will find online still uses the old API and
    can be woefully outdated.
 
+.. include:: ../includes/optional-module.rst
+
 .. seealso::
 
    * `TkDocs <https://tkdocs.com/>`_
diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst
index b687231bd489cc..58b99e0d44173a 100644
--- a/Doc/library/turtle.rst
+++ b/Doc/library/turtle.rst
@@ -29,6 +29,8 @@ introduced in Logo <https://en.wikipedia.org/wiki/Turtle_
 (robot)>`_, developed by Wally Feurzeig, Seymour Papert and Cynthia Solomon
 in 1967.
 
+.. include:: ../includes/optional-module.rst
+
 
 Get started
 ===========
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index f6ec33640b60d2..5a8bbc8c1aedf7 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -23,6 +23,16 @@ decryption of encrypted files in ZIP archives, but it 
currently cannot
 create an encrypted file.  Decryption is extremely slow as it is
 implemented in native Python rather than C.
 
+..
+   The following paragraph should be similar to ../includes/optional-module.rst
+
+Handling compressed archives requires :term:`optional modules <optional 
module>`
+such as :mod:`zlib`, :mod:`bz2`, :mod:`lzma`, and :mod:`compression.zstd`.
+If any of them are missing from your copy of CPython,
+look for documentation from your distributor (that is,
+whoever provided Python to you).
+If you are the distributor, see :ref:`optional-module-requirements`.
+
 The module defines the following items:
 
 .. exception:: BadZipFile
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index b961f7113d3686..ce0a22b9456d0b 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -8,9 +8,9 @@
 --------------
 
 For applications that require data compression, the functions in this module
-allow compression and decompression, using the zlib library. The zlib library
-has its own home page at https://www.zlib.net.  zlib 1.2.2.1 is the minium
-supported version.
+allow compression and decompression, using the `zlib library 
<https://www.zlib.net>`_.
+
+.. include:: ../includes/optional-module.rst
 
 zlib's functions have many options and often need to be used in a particular
 order.  This documentation doesn't attempt to cover all of the permutations;
diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst
index 1f773a3a547c2b..cdadbe51417499 100644
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
@@ -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,83 +25,136 @@ 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.
+.. versionchanged:: 3.5
+   On Windows, Visual Studio 2015 or later is now required.
 
-* `SQLite <https://sqlite.org/>`_ 3.15.2 for the :mod:`sqlite3` extension 
module.
+.. versionchanged:: 3.6
+   Selected C99 features, like ``<stdint.h>`` and ``static inline`` functions,
+   are now required.
 
-* `Tcl/Tk <https://www.tcl-lang.org/>`_ 8.5.12 for the :mod:`tkinter` module.
+.. versionchanged:: 3.7
+   Thread support is now required.
 
-* `zlib <https://www.zlib.net>`_ 1.2.2.1 is the minimum version for the
-  :mod:`zlib` module.
+.. versionchanged:: 3.11
+   C11 compiler, IEEE 754 and NaN support are now required.
+   On Windows, Visual Studio 2017 or later is required.
 
-* `zstd <https://facebook.github.io/zstd/>`_ 1.4.5 is the minimum version for
-  the :mod:`compression.zstd` module.
+See also :pep:`7` "Style Guide for C Code" and :pep:`11` "CPython platform
+support".
 
-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.
+.. _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.
+   Tcl/Tk version 8.3.1 is now required for :mod:`tkinter`.
 
 .. 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.
+   Tcl/Tk version 8.4 is now required for :mod:`tkinter`.
 
 .. versionchanged:: 3.7
-   Thread support and OpenSSL 1.0.2 are now required.
+   OpenSSL 1.0.2 is now required for :mod:`hashlib` and :mod:`ssl`.
 
 .. versionchanged:: 3.10
-   OpenSSL 1.1.1 is now required.
-   Require SQLite 3.7.15.
+   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
-   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.
+   Tcl/Tk version 8.5.12 is now required for :mod:`tkinter`.
 
 .. 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".
+   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.
diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst
index 9ec4e3419321a4..a9950ef7525497 100644
--- a/Doc/using/unix.rst
+++ b/Doc/using/unix.rst
@@ -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::
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to