使用 renv 隔离 Seurat 版本的完整指南
——单细胞分析环境管理最佳实践
🎯 写在前面:为什么一定要用 renv?
在单细胞分析中,Seurat 版本不一致几乎必然导致复现失败:
- Seurat v4 / v5 API 不兼容
- 依赖包强耦合(SeuratObject、Matrix、future 等)
- 多项目共用服务器极易相互污染
👉 renv 是目前 R 生态中最可靠的项目级环境隔离方案。
一、renv 的核心思想
环境是“项目级”的,而不是“会话级”的。
- 每个项目有独立包库:
renv/library - 版本信息写入:
renv.lock - 实际包文件可通过全局缓存复用(不重复安装)
二、典型场景:隔离 Seurat v4 / v5
/mnt/8T_Disk2/envs/
├── seurat_v4_project/
│ ├── renv/
│ ├── renv.lock
│ └── scripts/
└── seurat_v5_project/
├── renv/
├── renv.lock
└── scripts/
三、创建并初始化 renv 项目
1️⃣ 在项目目录启动 R
cd /mnt/8T_Disk2/seurat_v4_project
R
2️⃣ 初始化 renv
install.packages("renv")
renv::init()
四、安装指定版本的 Seurat
Seurat v4
renv::install("Seurat@4.3.0")
renv::snapshot()
Seurat v5
renv::install("Seurat@5.0.3")
renv::snapshot()
⚠️ 不要使用 install.packages()
五、验证环境
.libPaths()
packageVersion("Seurat")
sessionInfo()
六、是否需要重复安装包?
不需要。
- renv 使用全局缓存:
~/.cache/R/renv - 相同版本直接复用
renv::restore()通常秒级完成
七、必须在 renv 目录分析吗?
✅ 规则
必须在 renv 项目目录启动 R,但可以 setwd 到任意数据目录。
library(Seurat)
setwd("/mnt/8T_Disk2/real_data/scRNA")
❌ 常见错误
setwd("renv_project")
# 不会激活 renv
八、renv 自动激活原理
- 仅在 R 启动时 查找
renv/activate.R - 启动后 setwd 不影响环境
九、退出 / 删除环境
临时退出
renv::deactivate()
重新进入
renv::activate()
永久删除
unlink("renv", recursive = TRUE)
unlink("renv.lock")
核心总结
renv 决定“用什么包”,setwd 决定“读写什么数据”。