3. 环境搭建:Python、R、Seurat 与 Scanpy 配置归纳总结
说实话,搞 Visium 聚类分析,环境配置这块儿踩过的坑真不少。咱们这个章节就把 Python 和 R 两条路线彻底理顺。我个人习惯用 Miniconda 管理依赖,R 也走独立环境,这样项目之间不打架。下面我直接给出经反复验证的配置清单,你照着搭就行。
3.1 Anaconda 环境与 Python 工具链
为什么不直接装系统 Python?你想想看,Scanpy 依赖 numpy、pandas、scipy 这些底层库,版本稍微一乱就报奇奇怪怪的 ImportError。我建议用 conda 创建独立环境:
# 安装 Miniconda(推荐)或 Anaconda
# 创建 visium 专用环境
conda create -n visium python=3.9 -y
conda activate visium
# 核心依赖
conda install -c conda-forge scanpy python-igraph leidenalg -y
# 辅助库
pip install anndata scvelo dynamo bbknn
为什么要 Python 3.9? 我之前在 3.11 上跑 Scanpy 1.9 时,leidenalg 的二进制包经常编译失败,回退到 3.9 就稳了。记住,Scanpy 的官方文档虽然支持 3.8-3.11,但 3.9 是社区兼容性最好的版本。
个人小技巧: 如果你的服务器没有 root 权限,可以这样安装 Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
~/miniconda3/bin/conda init
3.2 R 与 RStudio 安装
R 这边我习惯用 Seurat v4.3,配合 SeuratDisk 做 H5 格式转换,再装 harmony 做批次校正。注意 R 3.6 以下的版本已经不再被 CRAN 支持,尽量装 4.2+。
# 在 R 控制台中执行
install.packages("Seurat")
install.packages("SeuratDisk")
install.packages("harmony")
install.packages("ggplot2")
install.packages("patchwork")
# BiocManager 安装额外包
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("multtest")
BiocManager::install("metap")
有一个坑我必须提一下:SeuratDisk 的安装依赖 rhdf5,而 rhdf5 需要系统上有 HDF5 库。如果你在 Windows 上遇到编译失败,可以改用:
install.packages("SeuratDisk", repos = "https://satijalab.r-universe.dev")
这个预编译包我亲测可用。
3.3 关键工具版本对比
| 工具 | 推荐版本 | 兼容性提示 |
|---|---|---|
| Python | 3.9.x | 必须 ≥3.8,3.11 以上 leidenalg 易报错 |
| Scanpy | 1.9.3 | 1.8 以下不支持 sc.tl.leiden 的分辨率参数 |
| leidenalg | 0.9.1 | 需要先安装 python-igraph |
| R | 4.2.3 | 4.0 以下 Seurat v5 无法安装 |
| Seurat | 4.3.0 | v5 目前不稳定,推荐 4.3 |
| SeuratDisk | 0.0.0.9020 | Windows 需从 r-universe 安装 |
| harmony | 1.0 | 兼容 Seurat v4 和 v5 |
核心原则: Scanpy 和 Seurat 两个生态的版本尽量锁定,不要混装 dev 版。我在项目中曾同时升级 Scanpy 和 numpy,结果 umap-learn 报 segment fault,回退版本才解决。
3.4 配置检查清单
搭建完环境后,我习惯用下面这组命令做快速检验。如果全部通过,就可以放心跑后面章节的代码了。
- Python 环境验证:进入 conda 环境,执行
python -c "import scanpy as sc; print(sc.__version__)"
python -c "import leidenalg; print(leidenalg.__version__)"
- R 包验证:打开 RStudio,执行
library(Seurat)
packageVersion("Seurat")
library(SeuratDisk)
library(harmony)
- CUDA 环境(可选):如果你有 GPU,检查 PyTorch 或 TensorFlow 是否可用
python -c "import torch; print(torch.cuda.is_available())"
⚠ 注意: 如果你在 macOS 上使用 M1/M2 芯片,建议用
conda install -c apple tensorflow-deps 安装 TensorFlow,否则 scanpy 的流程可能不兼容 Metal 后端。我在 M1 上折腾了整整一天才搞定。
3.5 环境搭建总览图
下面这张图概括了从操作系统到工具链的完整流程。你可以拿它当“对照地图”,一步一步搭建就不会漏。
3.6 避坑指南(个人血泪史)
最后分享几个我亲自踩过的坑,希望能帮你省下半天调试时间。
- conda 与 pip 混装导致依赖冲突:我曾经在同一个环境下先 conda install scanpy,又 pip install scanpy,结果 import 时报
AttributeError: module 'scanpy' has no attribute 'pp'。建议只用 conda 安装,除非 conda 上没有的包才用 pip。 - R 包版本锁定:SeuratDisk 在 CRAN 上的版本很旧,安装后读 H5 文件会报
cannot find 'H5Fopen'。必须从 r-universe 装预编译版,或用 devtools 从 GitHub 安装。 - leidenalg 在 M1 Mac 上的问题:直接
pip install leidenalg会尝试编译 C 扩展,大概率失败。解决方案是用 conda-forge 的二进制包:conda install -c conda-forge leidenalg。 - Windows 上 Scanpy 的并行问题:Scanpy 默认用多线程,但 Windows 下
multiprocessing会有 bug。可以在代码开头设置import multiprocessing; multiprocessing.set_start_method('spawn')避免阻塞。
一句话总结: 环境配置的核心就是“版本锁定 + 单一来源”。只要按我说的版本号装,Python 和 R 两条路都不会出大问题。如果遇到奇怪报错,先检查环境是不是激活错了,再检查包是不是多个来源混装。