8.51.1. Installation of Python 3
        
        
          Prepare Python for compilation:
        
        ./configure --prefix=/usr        \
            --enable-shared      \
            --with-system-expat  \
            --with-system-ffi    \
            --enable-optimizations
        
          
            The meaning of the configure options:
          
          
            - 
              --with-system-expat
- 
              
                This switch enables linking against the system version of
                Expat.
               
- 
              --with-system-ffi
- 
              
                This switch enables linking against the system version of
                libffi.so.
 
- 
              --enable-optimizations
- 
              
                This 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
        
          Running the tests at this point is not recommended. The tests are
          known to hang indefinitely in the partial LFS environment. If
          desired, the tests can be rerun at the end of this chapter, or when
          Python 3 is reinstalled in BLFS. To run the tests anyway, issue
          make test.
        
        
          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.11.4/html
tar --strip-components=1  \
    --no-same-owner       \
    --no-same-permissions \
    -C /usr/share/doc/python-3.11.4/html \
    -xvf ../python-3.11.4-docs-html.tar.bz2
        
          
            The meaning of the documentation install
            commands:
          
          
            - 
              --no-same-ownerand--no-same-permissions
- 
              
                Ensure the installed files have the correct ownership and
                permissions. Without these options, tar will install the package files with
                the upstream creator's values.