Python 3 软件包包含 Python 开发环境。它被用于面向对象编程,编写脚本,为大型程序建立原型,或者开发完整的应用。
准备编译 Python:
./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --enable-optimizations
配置选项的含义:
--with-system-expat
该选项允许链接到系统已经安装的 Expat。
--with-system-ffi
该选项允许链接到系统已经安装的 libffi。
--enable-optimizations
该选项启用稳定,但在编译期成本较高的优化。
编译该软件包:
make
不建议在此时运行测试。在不完整的 LFS 环境中,测试可能会永远陷入等待状态。如果希望运行测试,可以在本章结束时,或者在 BLFS 中重新安装 Python 3 时再运行测试。如果一定要进行测试,运行 make test。
安装该软件包:
make install
在本书中,我们以 root
用户的身份使用 pip3 命令,以便为所有用户安装 Python 3
程序和模块。而 Python 开发者推荐将软件包安装到虚拟环境或某个用户的主目录 (以该用户身份运行 pip) 中。因此,在以 root 用户身份使用
pip3
命令时,该命令会在运行结束时输出若干行警告信息。这项建议的主要目的是防止与系统包管理器 (如 dpkg) 发生冲突,但是 LFS
没有系统包管理器,所以不会出现此类问题。另外, pip3 在运行时会尝试检查它本身是否有新版本。由于 LFS
chroot 环境中没有配置域名解析功能,新版本检查会失败并产生警告。在引导 LFS
系统并配置网络连接后,如果有新版本可用,该命令会输出警告,提示用户使用来自 PyPI 的预先构建的 wheel 包进行更新。然而
LFS 中 pip3 是 Python 3
的一部分,因此不应单独更新,另外使用预先构建的 wheel 包也会偏离我们从源码构建 Linux 系统的目标。因此,应当忽略关于新的
pip3
版本的警告。如果不希望看到这些警告,运行以下命令以阻止它们:
cat > /etc/pip.conf << EOF [global] root-user-action = ignore disable-pip-version-check = true EOF
在 LFS 和 BLFS 中,我们通常用 pip3 命令构建和安装 Python
模块。请注意两份手册中的 pip3
install 命令都应该以 root
身份运行,除非这条命令是为 Python 虚拟环境进行安装。以非
root
用户身份运行 pip3 install
命令可能看似正常工作,但这会导致其他用户无法访问安装的模块。
pip3 install
在默认情况下不会重新安装已经安装好的模块。如果需要用 pip3
install 命令升级模块 (例如,从 meson-0.61.3 升级到
meson-0.62.0),则需要在命令行中加入 --upgrade
选项。如果由于某种原因,确实需要降级某个模块,或重新安装某个已安装的版本,需要在命令行中加入 --force-reinstall --no-deps
选项。
如果需要的话,安装预先格式化的文档:
install -v -dm755 /usr/share/doc/python-3.10.6/html tar --strip-components=1 \ --no-same-owner \ --no-same-permissions \ -C /usr/share/doc/python-3.10.6/html \ -xvf ../python-3.10.6-docs-html.tar.bz2
文档安装命令的含义:
--no-same-owner
和 --no-same-permissions
保证安装的文件拥有正确的所有者和权限模式。在没有这些选项的时候,tar 会以上游开发者使用的用户和权限模式安装文件。