刘岚实验室

离线安装 R / Python 包教程

2026/08/21
9
0

机房服务器无外网,如需安装清单之外的 R 包或 Python 包,按以下步骤操作。


原理

  • R 包:在有网的个人电脑上下载源码(.tar.gz)及依赖 → 通过堡垒机上传 → 服务器离线安装。
  • Python 包:优先从服务器本地的 wheel 仓库(/data/python-wheels)直接安装,无需个人电脑;仓库没有的包,才走「个人电脑下载源码包 → 上传 → 安装」。

全程不需要 sudo 权限,不需要去机房插 U 盘。


准备工作

  • 个人电脑安装与服务器相同版本的 R(R 4.6.1
  • 建议版本完全一致,避免版本差异导致安装失败
  • 能通过堡垒机 SSH 登录服务器
  • (Python 方式二需要)个人电脑装有 Python 和 pip

步骤一:在有网电脑上下载包

以安装 lme4 为例(替换成你需要的包名):

# 在个人电脑的 R 中执行
options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))  # 先设置镜像源

target_pkg <- "lme4"

# 获取该包及其所有依赖
deps <- tools::package_dependencies(target_pkg, 
                                     db = available.packages(), 
                                     which = c("Depends", "Imports", "LinkingTo"),
                                     recursive = TRUE)
all_pkgs <- unique(c(target_pkg, unlist(deps)))

# 下载所有包的源码
dir.create("offline_pkgs")
download.packages(all_pkgs, destdir = "offline_pkgs", type = "source")

cat("下载完成,共", length(all_pkgs), "个包\n")

如清华镜像下载慢,把上面 options 里的地址换成官方源 https://cloud.r-project.org/ 即可。


步骤二:通过堡垒机上传到服务器

上传操作说明见专门文档:堡垒机上传说明


步骤三:在服务器上安装

SSH 登录服务器后,在 R 中执行:

# 安装 offline_pkgs 目录下的所有包
pkg_path <- "~/offline_pkgs"                          # 上传到 home 的路径
pkg_files <- list.files(pkg_path, pattern = "\\.tar\\.gz$", full.names = TRUE)

install.packages(pkg_files, repos = NULL, type = "source")

安装完成后确认:

library(lme4)   # 替换成你的包名,应成功加载

Bioconductor 包的离线安装

Bioconductor 包同样用 download.packages() 下载,只需指定 Bioconductor 源。在个人有网电脑的 R 中:

library(BiocManager)

# Bioconductor 源(含 BioCsoft、BioCann、CRAN)
bioc_repos <- BiocManager::repositories()

# 以 DESeq2 为例(替换成你需要的包名)
target_pkg <- "DESeq2"

# 获取该包及其所有依赖
deps <- tools::package_dependencies(target_pkg,
                                     db = available.packages(repos = bioc_repos),
                                     which = c("Depends", "Imports", "LinkingTo"),
                                     recursive = TRUE)
all_pkgs <- unique(c(target_pkg, unlist(deps)))

# 下载所有包的源码
dir.create("offline_pkgs")
download.packages(all_pkgs, destdir = "offline_pkgs", type = "source", repos = bioc_repos)

cat("下载完成,共", length(all_pkgs), "个包\n")

上传与安装方式与普通 R 包完全相同(见步骤二、步骤三)。


Python 包的离线安装

服务器已配置本地 wheel 仓库 /data/python-wheels 和默认离线源,补包很简单。

方式一:克隆环境后装(推荐)

登录服务器后,先激活 work 环境(若 conda 提示 command not found,先执行下面第 0 步的 source),再克隆一份自己的环境装包:

# 0. 加载 conda 并激活 work 环境(每次新登录执行一次;若已自动激活可跳过)
source /data/miniconda3/etc/profile.d/conda.sh
conda activate work

# 1. 克隆 work 到自己的环境(只需做一次;--offline 避免断网时联网卡住)
conda create -p ~/envs/myenv --clone /data/miniconda3/envs/work --offline

# 2. 激活自己的环境
conda activate ~/envs/myenv

# 3. 从本地仓库离线安装
pip install 包名

pip 已配置为从本地仓库 /data/python-wheels 离线安装。

只能安装仓库里已有的包。查看仓库有哪些包:

ls /data/python-wheels/

方式二:仓库没有的包

如果需要的包不在本地仓库,在有网的个人电脑下载源码包后上传(源码包跨平台,Windows 电脑下载也能在 Linux 服务器上编译安装):

1. 个人电脑下载源码包(含依赖):

pip download --no-binary=:all: -d my_wheels 包名

注意:不要用 --only-binary=:all:,否则 Windows 电脑会下载 Windows 版 wheel,Linux 服务器装不了。

2. 通过堡垒机把 my_wheels/ 上传到服务器 home 目录(见步骤二的上传说明)。

3. 在自己环境中离线安装(先按方式一克隆并激活自己的环境):

pip install --no-index --find-links=~/my_wheels 包名

纯 Python 包(无 C 扩展)可直接安装;带 C 扩展的包若编译报错缺系统库,联系管理员安装对应 lib*-dev


常见问题

问题 原因 解决
编译报错 xxx.h: No such file 缺少系统依赖(lib*-dev 包) 联系管理员安装对应的 lib*-dev
package is not available 个人电脑和服务器 R 版本不同 两台机器都用 R 4.6.x
某些包从 CRAN 下载超时 默认镜像网络慢 有网电脑上换清华镜像(见步骤一)
安装后 library() 报依赖缺失 上传时漏掉了某些依赖包的 tar.gz 重新下载,确保 recursive = TRUE
pip installNo matching distribution found 本地 wheel 仓库没有该包 用「方式二」从有网电脑下载源码包上传后安装
下载的 wheel 服务器装不上 Windows 电脑下了 Windows 版 wheel 改用 --no-binary=:all: 下载源码包(见方式二)

建议

  1. 先在有网电脑试通流程:下载 → 上传 → 安装,确保整套流程没问题

  2. 上传后及时安装:不要上传完放几天,避免被清理

  3. 安装完记录版本

    R -e 'write.csv(as.data.frame(installed.packages()[, c("Package","Version")]), 
                   "~/package_versions.csv", row.names=FALSE)'