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.
Note
Development versions of BLFS may not build or run some packages
properly if LFS or dependencies have been updated since the most
recent stable versions of the books.
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.82.1 (with
GObject Introspection), libxml2-2.13.4, opencv-4.10.0, FontForge-20230101, gnome-tweaks-46.1, Samba-4.21.0,
and Graphviz-12.1.2 (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
Additional Optional Download
Python 3 Dependencies
Recommended
SQLite-3.46.1 (required if building firefox or
thunderbird)
Optional
BlueZ-5.78, GDB-15.2 (required for some tests), Valgrind-3.23.0,
and libmpdec
Optional (For Additional Modules)
libnsl-2.0.1, Tk-8.6.15, 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.7/html
tar --strip-components=1 \
--no-same-owner \
--no-same-permissions \
-C /usr/share/doc/python-3.12.7/html \
-xvf ../python-3.12.7-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.7 /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.7
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
|