Python 3 软件包包含 Python 开发环境。它被用于面向对象编程,编写脚本,为大型程序建立原型,或者开发完整的应用。Python 是一种解释性的计算机语言。
准备编译 Python:
./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --enable-optimizations
配置选项的含义:
--with-system-expat
该选项允许链接到系统已经安装的 Expat。
--with-system-ffi
该选项允许链接到系统已经安装的 libffi.so
。
--enable-optimizations
该选项启用有力,但是消耗时间的优化步骤。它会两次构建解释器;在初次构建结果上运行测试,并使用测试结果优化最终构建版本的性能。
编译该软件包:
make
不建议在此时运行测试。在不完整的 LFS 环境中,测试可能会永远陷入等待状态。如果希望运行测试,可以在本章结束时,或者在 BLFS 中重新安装 Python 3 时再运行测试。如果一定要进行测试,运行 make test。
安装该软件包:
make install
在本书中,我们以 root
用户身份,使用 pip3 命令,为所有用户安装 Python 3 程序和模块。这和
Python 开发者的建议不同:他们认为应该将这些包安装到虚拟环境中,或者某个用户的主目录中 (即,以该用户身份执行
pip3 命令)。只要使用
root
用户身份执行 pip3 命令,它就会输出若干行警告信息。
这项建议主要是为了避免和系统包管理器 (如 dpkg) 的冲突。LFS 没有系统包管理器,所以不存在这个问题。另外,pip3 在运行时,会检查它的最新版本。由于 LFS chroot 环境中没有配置域名解析,pip3 无法检查它的最新版本,也会输出一条警告信息。
在引导 LFS 系统并配置网络连接后,则会出现一条不同的警告信息,指示用户使用 PyPI 提供的,预先构建的 wheel 档案更新 pip3 (如果有更新的版本)。但是对于 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.11.2/html tar --strip-components=1 \ --no-same-owner \ --no-same-permissions \ -C /usr/share/doc/python-3.11.2/html \ -xvf ../python-3.11.2-docs-html.tar.bz2
文档安装命令的含义:
--no-same-owner
和 --no-same-permissions
保证安装的文件拥有正确的所有者和权限模式。在没有这些选项的时候,tar 会以上游开发者使用的用户和权限模式安装文件。