Installation of Python 3
Prepare Python for compilation:
./configure --prefix=/usr \
--enable-shared \
--with-system-expat \
--enable-optimizations \
--without-static-libpythonThe meaning of the configure options:
--with-system-expatThis switch enables linking against the system version of
Expat.
--enable-optimizationsThis switch enables extensive, but time-consuming, optimization
steps. The interpreter is built twice; tests performed on the first
build are used to improve the optimized final version.
Compile the package:
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.
Install the package:
make install
We use the pip3 command to
install Python 3 programs and modules for all users as
root in several places in this book.
This conflicts with the Python developers' recommendation: to install packages into a
virtual environment, or into the home directory of a regular user (by running
pip3 as this user). A multi-line warning
is triggered whenever pip3 is issued by the
root user.
The main reason
for the recommendation is to avoid conflicts with the system's
package manager (dpkg, for example). LFS does not
have a system-wide package manager, so this is not a problem. Also,
pip3 will check for a new version of
itself whenever it's run. Since domain name resolution is not yet configured
in the LFS chroot environment, pip3 cannot check
for a new version of itself, and will
produce a warning.
After we boot the LFS system and set up a network connection,
a different warning will be issued, telling the user to update pip3
from a pre-built wheel on PyPI (whenever a new version is available). But LFS
considers pip3 to be a part of Python 3, so it should not be
updated separately. Also, an update from a pre-built wheel would deviate
from our objective: to build a Linux system from source code. So the
warning about a new version of pip3 should be ignored as
well. If you wish, you can suppress all these warnings by running the following
command, which creates a configuration file:
cat > /etc/pip.conf << EOF
[global]
root-user-action = ignore
disable-pip-version-check = true
EOF
![[Important]](../images/important.png)
Important
In LFS and BLFS we normally build and install Python modules with the
pip3 command. Please be sure that the
pip3 install commands in both books are
run as the root user (unless it's for a Python virtual environment).
Running pip3 install as a non-root user may seem
to work, but it will cause the installed module to be inaccessible
by other users.
pip3 install will not reinstall an already installed
module automatically. When using the pip3 install
command to upgrade a module (for example, from meson-0.61.3 to
meson-0.62.0), insert the option --upgrade into
the command line. If it's really necessary to downgrade a module, or
reinstall the same version for some reason, insert
--force-reinstall --no-deps into the command
line.
If desired, install the preformatted documentation:
install -v -dm755 /usr/share/doc/python-3.14.0/html
tar --strip-components=1 \
--no-same-owner \
--no-same-permissions \
-C /usr/share/doc/python-3.14.0/html \
-xvf ../python-3.14.0-docs-html.tar.bz2The meaning of the documentation install commands:
--no-same-owner and --no-same-permissionsEnsure the installed files have the correct ownership and
permissions. Without these options, tar
will install the package files with the upstream creator's values.