如何为CentOS8构建特定Python3.7版本的RPM或tgz安装包
该需求完全可行,以下是两种可落地的实现方案:
方案1:RPM包构建(最优选择)
你需要提前准备一台和目标机器系统版本完全一致的CentOS 8构建机,所有操作在构建机上完成:
- 第一步:安装RPM构建基础工具和Python编译依赖(仅构建机需要,目标机无需安装)
yum install -y rpm-build rpmdevtools yum-utils gcc openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel
- 第二步:初始化RPM构建目录
执行rpmdev-setuptree,执行完成后会在当前用户家目录生成rpmbuild文件夹,包含BUILD、RPMS、SOURCES、SPECS、SRPMS五个子目录。 - 第三步:准备源码
从Python官方发布站点下载Python 3.7.x版本的源码压缩包,放到~/rpmbuild/SOURCES目录下。 - 第四步:编写SPEC配置文件
在~/rpmbuild/SPECS目录下新建python37.spec文件,参考配置如下:
Name: python37 Version: 3.7.16 Release: 1%{?dist} Summary: Python 3.7 runtime for CentOS 8 License: Python BuildRequires: gcc, openssl-devel, bzip2-devel, libffi-devel, zlib-devel, xz-devel Requires: openssl-libs, bzip2-libs, libffi, zlib, xz-libs, libuuid %description Python 3.7 独立运行环境,不与系统自带Python版本冲突 %prep %setup -q -n Python-%{version} %build ./configure --prefix=/usr/local/python37 --enable-shared --enable-optimizations make %{?_smp_mflags} %install make install DESTDIR=%{buildroot} mkdir -p %{buildroot}/usr/bin ln -s /usr/local/python37/bin/python3.7 %{buildroot}/usr/bin/python3.7 ln -s /usr/local/python37/bin/pip3.7 %{buildroot}/usr/bin/pip3.7 echo "/usr/local/python37/lib" > %{buildroot}/etc/ld.so.conf.d/python37.conf %post ldconfig %files /usr/local/python37/* /usr/bin/python3.7 /usr/bin/pip3.7 /etc/ld.so.conf.d/python37.conf
- 第五步:构建RPM包
执行rpmbuild -bb ~/rpmbuild/SPECS/python37.spec,构建完成后生成的RPM包会存放在~/rpmbuild/RPMS/x86_64/目录下。 - 目标机安装方式
将RPM包传到目标机,执行yum localinstall -y python37-3.7.16-1.el8.x86_64.rpm即可,yum会自动安装所有运行时依赖,无需任何编译操作。
方案2:便携TGZ压缩包方案
如果不需要RPM管理,也可以直接制作便携压缩包:
- 同样在CentOS 8构建机上完成Python 3.7编译,配置阶段指定安装前缀:
./configure --prefix=/opt/python37 --enable-shared --enable-optimizations - 编译完成后执行
make install,将所有生成的文件安装到/opt/python37目录 - 执行打包命令:
tar zcvf python37.tar.gz -C /opt python37 - 运行时依赖列表如下,目标机提前安装即可:
- openssl-libs
- bzip2-libs
- libffi
- zlib
- xz-libs
- libuuid
- 目标机使用方式:将压缩包解压到
/opt目录,执行echo "/opt/python37/lib" >> /etc/ld.so.conf && ldconfig即可直接调用/opt/python37/bin/python3.7使用。
注意事项
- 两种方案都要求构建机的CentOS 8版本和目标机完全一致,避免glibc等系统库版本差异导致的兼容问题
- 不要修改系统默认的
python、python3命令软链接,避免破坏yum等系统自带工具的正常运行 - 若需要额外的Python内置模块支持,可在构建阶段提前安装对应依赖的devel包后重新编译即可。
内容的提问来源于stack exchange,提问作者GaryO
相关产品推荐
相关产品推荐

