如何通过联网跳板机M1为无网远程机M2完成带依赖的pip安装
借助联网跳板机为无网主机安装pip包的高效方案
前置校验(必须执行,避免包不兼容)
- 通过SSH跳板登录M2,执行以下命令记录核心参数:
python3 --version记录Python主版本号(如3.9、3.11)uname -m记录CPU架构(如x86_64、aarch64)- 若pip版本低于20.0,需准备对应升级包
- 退出M2,回到M1的Shell环境操作
- 备注:若M1和M2的Python版本、CPU架构完全一致,可跳过适配参数配置,直接下载M1当前环境适配的包
方案一:临时单次安装(最快落地)
用pip内置的download命令一次性拉取所有适配目标环境的包及依赖,无需手动梳理依赖关系
- 在M1上创建临时存储目录,执行下载命令:
补充说明:mkdir -p ~/pip_m2_pkgs pip download <需安装的包名,多个包用空格分隔> -d ~/pip_m2_pkgs \ --platform <替换为M2架构对应的pip平台标识,如x86_64对应manylinux2014_x86_64,aarch64对应manylinux2014_aarch64> \ --python-version <替换为M2的Python主版本号,如39、311> \ --prefer-binary- 若已在M1上部署好相同的Python环境,可先执行
pip freeze > requirements.txt导出依赖列表,命令改为pip download -r requirements.txt -d ~/pip_m2_pkgs ...,无需手动列包名 - 需安装私有源包时,在命令末尾追加
--index-url <对应私有源地址>即可
- 若已在M1上部署好相同的Python环境,可先执行
- 打包下载好的包目录,直接通过内网链路传到M2(无需本地电脑中转):
tar -czf m2_pkgs.tar.gz ~/pip_m2_pkgs scp m2_pkgs.tar.gz <M2用户名>@<M2内网IP>:~/ - 登录M2,解压后执行离线安装:
tar -xzf m2_pkgs.tar.gz pip install --no-index --find-links=~/pip_m2_pkgs <和下载时一致的包名/依赖列表>
方案二:长期高频安装(反复使用更省事)
依托M1和M2的内网连通性,直接把M1搭成临时pip源,后续M2安装包无需反复传输文件
- 在M1上创建公共包存储目录,提前把常用包、私有源包全部下载到该目录:
mkdir -p ~/local_pip_source pip download <常用包列表> -d ~/local_pip_source --no-cache-dir - 在该目录下启动HTTP服务,自动生成pip兼容的索引:
cd ~/local_pip_source python3 -m http.server 8080 - 登录M2,安装时直接指定M1的源地址即可,命令和常规在线安装完全一致:
可将该源地址写入M2的pip配置文件pip install --index-url http://<M1内网IP>:8080/simple <需安装的包名>~/.pip/pip.conf,后续安装无需手动指定参数
常见避坑说明
- 必须严格对齐M2的Python版本、CPU架构,否则下载的包无法在M2运行,禁止直接拷贝M1的已安装Python包目录到M2使用
--prefer-binary参数会优先下载预编译的wheel包,避免M2因缺少gcc、编译依赖导致安装失败- 若M2的pip版本过旧,先在M1下载对应平台的最新pip wheel包,传到M2手动执行
pip install <pip的wheel包路径>升级后再操作
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

