Python-3.12.5

#### Beyond Linux® From Scratch (systemd Edition) - Version 12.2

### Chapter 13. Programming

- Prev

  PHP-8.3.10

- Next

  Python-3.11.1

- Up
- Home

# Python-3.12.5

## Introduction to Python 3

The Python 3 package contains the Python development environment. This is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications.

### Note

Python 3 was installed in LFS. The only reason to rebuild it here is if optional modules are needed, or to upgrade this package.

This package is known to build and work properly using an LFS 12.2 platform.

### Important

If upgrading to a new Python-3 minor version (for example, from Python-3.11.x to Python-3.12.0), you will need to reinstall any Python3 modules you have installed. You should also reinstall packages that generate Python3 modules including GLib-2.80.4 (with GObject Introspection), libxml2-2.13.3, opencv-4.10.0, FontForge-20230101, gnome-tweaks-46.1, Samba-4.20.4, and Graphviz-12.1.0 (if swig is installed).

Before you upgrade, you can get a list of modules installed with pip3 list. The list may be incomplete as some Python modules are not installed with pip3, for example the `cracklib` module installed by CrackLib-2.10.2. Use ls /usr/lib/python3.`minor`/site-packages for a comprehensive list.

The Python modules from LFS will also have to be reinstalled: flit-core, wheel, setuptools, meson, MarkupSafe, and Jinja2.

### Package Information

- Download (HTTP): https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz

- Download MD5 sum: 02c7d269e077f4034963bba6befdc715

- Download size: 19 MB

- Estimated disk space required: 335 MB (add 59 MB for tests)

- Estimated build time: 1.6 SBU (add 0.6 SBU for tests; both using parallelism=4)

### Additional Optional Download

- Download (HTTP): https://www.python.org/ftp/python/doc/3.12.5/python-3.12.5-docs-html.tar.bz2

- Download MD5 sum: 52274d813236ca4a972fb6988480dc56

### Python 3 Dependencies

#### Recommended

SQLite-3.46.1 (required if building firefox or thunderbird)

#### Optional

BlueZ-5.77, GDB-15.1 (required for some tests), Valgrind-3.23.0, and libmpdec

#### Optional (For Additional Modules)

libnsl-2.0.1, Tk-8.6.14, and Berkeley DB (deprecated)

Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python3

## Installation of Python 3

Install Python 3 by running the following commands:

    CXX="/usr/bin/g++"               \
    ./configure --prefix=/usr        \
                --enable-shared      \
                --with-system-expat  \
                --enable-optimizations &&
    make

Some tests are known to occasionally hang indefinitely. So to test the results, run the test suite but set a 2-minute time limit for each test case:

    make test TESTOPTS="--timeout 120"

For a relatively slow system you may need to increase the time limit and 1 SBU (measured when building Binutils pass 1 with one CPU core) should be enough. Some tests are flaky, so the test suite will automatically re-run failed tests. If a test failed but then passed when re-run, it should be considered as passed.

Of over 42,000 tests, the following are known to fail: test__xxsubinterpreters, test_import, test_interpreters, and test_threading.

Now, as the `root` user:

    make install

If upgrading and the documentation has been downloaded, optionally install it as the `root` user:

    install -v -dm755 /usr/share/doc/python-3.12.5/html

    tar --strip-components=1  \
        --no-same-owner       \
        --no-same-permissions \
        -C /usr/share/doc/python-3.12.5/html \
        -xvf ../python-3.12.5-docs-html.tar.bz2

## Command Explanations

CXX="/usr/bin/g++" ./configure ...: Avoid an annoying message during configuration.

`--with-system-expat`: This switch enables linking against the system version of Expat.

`--enable-optimizations`: This switch enables stable, but expensive, optimizations.

`--with-lto`: This optional switch enables thick Link Time Optimization. Unusually, it creates a much larger `/usr/lib/python3.12/config-3.12-<arch>-linux-gnu/libpython3.12.a` with a small increase in the time to compile Python. Run-time results do not appear to show any benefit from doing this.

## Configuring Python 3

In order for python3 to find the installed documentation, create the following version independent symlink:

    ln -svfn python-3.12.5 /usr/share/doc/python-3

and add the following environment variable to the individual user's or system's profile:

    export PYTHONDOCS=/usr/share/doc/python-3/html

## Contents

Installed Programs: 2to3 (symlink) and 2to3-3.12, idle3 (symlink) and idle3.12, pip3 and pip3.12, pydoc3 (symlink) and pydoc3.12, python3 (symlink) and python3.12, and python3-config (symlink) and python3.12-config
Installed Libraries: libpython3.12.so and libpython3.so
Installed Directories: /usr/include/python3.12, /usr/lib/python3.12, and /usr/share/doc/python-3.12.5

### Short Descriptions

idle3 | is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built
pydoc3 | is the Python documentation tool
python3 | is an interpreted, interactive, object-oriented programming language
python3.12 | is a version-specific name for the python program

- Prev

  PHP-8.3.10

- Next

  Python-3.11.1

- Up
- Home