3. 环境配置
环境配置这件事,说实话是很多人在空间转录组分析路上翻的第一个跟头。我见过不少同学拿到数据后急着跑分析,结果因为依赖冲突折腾一整天,最后还得从头配环境。
今天我就带大家一步步搭好这个环境。你别看这一步简单,配置得好,后面几十个章节你会跑得特别顺。
3.1 为什么我们需要一个干净的虚拟环境?
Python包管理有个特点——依赖嵌套。比如Scanpy依赖anndata,anndata又依赖h5py和numpy。你在系统环境里装了一堆包,很可能某个包版本不对,导致Visium分析跑不起来。说白了就是为了保证不同项目之间互不干扰。
我个人习惯用conda来管理虚拟环境。原因很简单:conda不仅能装Python包,还能装一些非Python的依赖库,比如HDF5、zlib这些C库。你如果用pip,有时候还得手动去处理系统级的依赖,非常麻烦。
3.2 安装Miniconda
如果你还没有装conda,我建议装Miniconda而不是Anaconda。Miniconda更轻量,只带核心功能,后面需要什么包再装什么包。比如你在服务器上跑分析,Miniconda只有几百兆,Anaconda却有几个G,你想想看。
安装步骤很直接:
# Linux 或 macOS
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 安装过程中一路 yes,最后记得 source ~/.bashrc 激活
嗯,这里有个细节要注意——安装路径。我建议放在家目录下的 ~/miniconda3,这样不会跟系统Python冲突。记得之前有个学员把conda装到系统root,结果更新系统包时把conda搞崩了,惨不忍睹。
3.3 创建并激活虚拟环境
现在我们来创建一个叫 visium 的环境:
# 创建环境,指定Python版本为3.9
conda create -n visium python=3.9 -y
# 激活环境
conda activate visium
为什么选Python 3.9?我实测过,Scanpy 1.9.x和Squidpy 1.2.x在3.9上跑得最稳。3.10以上版本虽然在兼容性上没问题,但有些底层包比如leidenalg(用于聚类)在3.9上构建更成熟。你如果非要追新,那就用3.10,但出问题别怪我事先没提醒啊。
conda env list 可以查看当前已有的所有虚拟环境。当前激活的环境前面会有一个 * 标记。
3.4 安装核心包:Scanpy与Squidpy
这两个是Visium分析的主力。Scanpy负责单细胞水平的分析流程,Squidpy则专门处理空间转录组数据,比如图像处理、空间自相关分析、邻域分析等。我当时第一次接触Visium数据,就是先跑Scanpy做质量控制,然后用Squidpy看基因在组织切片上的空间分布模式。二者配合使用,效果非常棒。
安装命令如下:
# 安装Scanpy
conda install -c conda-forge scanpy -y
# 安装Squidpy
conda install -c conda-forge squidpy -y
如果网络慢,可以用清华镜像源:
# 配置清华镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
# 然后再安装
conda install scanpy squidpy -y
为什么我推荐用conda-forge频道?因为conda-forge里的package构建完整,依赖解析也更准确。我曾经因为用pip直接装Scanpy,结果装到一半卡在h5py上,折腾了一个下午。后来换conda-forge,一分钟搞定。
3.5 安装可视化与数据处理包
matplotlib和pandas估计没人不熟悉。前者用来画图,后者管理数据框。还有几个辅助包也是必备的:
# 核心可视化
conda install matplotlib seaborn -y
# 数据处理
conda install pandas numpy scipy -y
# 其他工具
conda install jupyter ipykernel -y
我个人还习惯装上 tqdm——进度条工具,跑循环时心里有底;还有 numba——加速计算,有些空间分析函数用numba能快几十倍。
conda install tqdm numba -y
是不是装太多了?其实你想想,后面做空间可变基因筛选、邻域分析、染色质结构域识别,哪一步离得开numpy和scipy?一次性装好,省得后面缺包再去装。
3.6 验证安装是否成功
环境配完,总得试一下能不能用。我在命令行里敲一个快速验证脚本:
python -c "
import scanpy as sc
import squidpy as sq
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
print('Scanpy version:', sc.__version__)
print('Squidpy version:', sq.__version__)
print('All packages loaded successfully!')
"
如果输出类似:
Scanpy version: 1.9.6
Squidpy version: 1.2.3
All packages loaded successfully!
那就说明环境配置成了。嗯,这里有个小坑——如果报错说某个模块找不到,多半是依赖冲突或版本不匹配。我处理过很多次,最常见的错误是 ImportError: libhdf5.so.200。解决方法是:
conda install hdf5 -c conda-forge -y
然后重新激活环境即可。其实这就是conda-forge的优势所在——它会把C库的依赖也一并解决。
3.7 配置Jupyter内核
大多数同学喜欢在Jupyter Notebook里交互式分析。我们需要把刚才配好的 visium 环境注册到Jupyter里:
# 安装ipykernel(如果没装的话)
conda install ipykernel -y
# 注册内核
python -m ipykernel install --user --name visium --display-name "Visium (Python 3.9)"
之后打开Jupyter,在Kernel菜单里选择 Visium (Python 3.9) 就行。
Python: Select Interpreter,然后找到 visium 环境。否则用默认的Python解释器,后面所有分析和可视化都跑不了。
3.8 升级还是降级?该用哪个版本?
我在不同项目里试过Scanpy的版本,稳定性和功能上有区别。我把常用版本整理成了表格,方便你参考:
| 包名 | 推荐版本 | 适用场景 |
|---|---|---|
| Scanpy | 1.9.x | 通用分析,QC、降维、聚类、Marker基因 |
| Squidpy | 1.2.x | 空间分析:邻域、自相关、染色质结构域 |
| anndata | 0.9.x | 数据存储与读写,与Scanpy深度绑定 |
| matplotlib | 3.7+ | 基础可视化,任何分析都离不开 |
| pandas | 1.5+ | 数据框操作,管理元数据、表达矩阵 |
我的建议:直接用 conda install 从conda-forge装上来的版本就行,conda-forge会帮你做好版本兼容性检测。如果非要手动指定版本,可以这么写:
conda install scanpy==1.9.6 squidpy==1.2.3 -y
为什么我要专门说版本号?因为空间转录组分析的包更新很快,有些新版API变了,旧代码就跑不通。我记得有一次Squidpy从1.2升级到1.3,把 sq.gr.spatial_neighbors 的参数改掉了,我差点没排查出来。还是锁定版本比较保险。
3.9 总结:你的环境已准备就绪
走到这里,你的机器上已经有了一个干净、专用于Visium空间转录组分析的Python环境。整个过程就是这样:
- 安装Miniconda作为包管理器
- 创建名为
visium的虚拟环境,Python 3.9 - 从conda-forge安装Scanpy和Squidpy
- 辅以matplotlib、pandas、numpy、seaborn等科学计算包
- 注册为Jupyter内核,方便交互式分析
接下来,我们就要用这个环境来读取真实的Visium数据、做质量控制、降维聚类,直至获得有生物学意义的空间模式。嗯,到那时候你会感谢现在这一套干净的配置——因为后面所有坑,都只会是分析本身的坑,而不是环境的坑。
conda list,检查每个包的版本是否在推荐范围内。万事俱备,只欠数据!