如何在无网络的Linux服务器离线安装RPM包及其依赖(以Python 3为例)
嘿,这个场景我太熟了——给离线Linux服务器装带依赖的RPM包(比如Python3),核心思路就是先把所有需要的包(包括层级依赖)提前备好,再弄到离线机器上安装。下面给你两种最实用的方法,按需选择:
方法一:用同版本联网机器批量下载(最推荐,零踩坑)
如果能找到一台和目标离线服务器系统版本完全一致、CPU架构相同的联网Linux机器,这绝对是最省心的方式,能确保所有依赖100%匹配:
- 先在联网机器上安装包下载工具:
要是用的是CentOS/RHEL 7这类老系统,装yum-utils:
要是CentOS/RHEL 8+或者Fedora,装sudo yum install yum-utils -ydnf-plugins-core:sudo dnf install dnf-plugins-core -y - 创建一个专门的目录存放下载的RPM包,避免和其他文件混在一起:
mkdir ~/python3_offline_pkgs - 用
yumdownloader下载Python3及其所有依赖,--resolve参数会自动拉取所有层级的依赖包:
(如果需要特定版本,比如Python3.9,就把命令里的sudo yumdownloader --resolve --destdir ~/python3_offline_pkgs python3python3换成python39,具体包名根据你的发行版调整) - 把
~/python3_offline_pkgs目录里的所有RPM包,通过U盘、内网文件传输工具(比如SCP,要是内网通的话)拷贝到离线服务器的某个目录,比如/tmp/python3_pkgs - 登录离线服务器,进入包所在目录,用
yum或dnf本地安装(自动处理依赖顺序,比直接用rpm -ivh靠谱):cd /tmp/python3_pkgs sudo yum localinstall *.rpm -y # 或者用dnf sudo dnf localinstall *.rpm -y
方法二:手动下载包和依赖(无同环境联网机器的情况)
要是找不到同环境的联网机器,只能手动排查依赖并下载,步骤会繁琐一些,但也能搞定:
- 先找一个和目标服务器系统版本、架构匹配的Python3 RPM包,传到离线服务器上,尝试安装看缺哪些依赖:
(把sudo rpm -ivh python3-xxx.rpmxxx换成你实际的包版本号,比如python3-3.6.8-18.el7.x86_64.rpm)
执行后会报错,列出所有缺失的依赖包名,比如libssl.so.1.1()(64bit)、zlib-devel这类,把这些名字都记下来 - 去对应发行版的官方RPM仓库(比如CentOS Vault、RHEL订阅仓库),手动搜索每个依赖包,一定要选和服务器系统版本、架构完全匹配的包下载
- 把所有下载好的依赖包和Python3包放到离线服务器的同一个目录
- 同样用
yum localinstall命令安装,它会自动处理依赖的安装顺序:sudo yum localinstall *.rpm -y
额外提醒
- 千万要注意:下载的RPM包必须和目标服务器的**系统大版本(比如CentOS 7 vs CentOS 8)、CPU架构(x86_64/arm64等)**完全一致,不然会出现兼容性错误
- 如果还需要装Python的配套工具(比如
python3-pip),可以用同样的方法下载它的依赖包,一起放到目录里安装 - 有些依赖可能还有自己的子依赖,所以方法一的同环境批量下载是最不容易踩坑的,能一次性拉全所有层级的依赖
内容的提问来源于stack exchange,提问作者Raul Mercado




