3. Python 与生物信息环境搭建:Anaconda、conda 环境、Jupyter Notebook 的配置和使用
好,到了第三讲。上一章我们聊了单细胞数据的基本概念和 Harmony 的原理,都是纸上谈兵。这一章我们得把家伙事儿都支棱起来——装 Python、配 conda 环境、搞定 Jupyter Notebook。我个人习惯是在一台干净的 Linux 或者 macOS 上开始,Windows 用户也完全没问题,用 PowerShell 走到底就行。
说白了,这部分就是搭积木。Anaconda 是那个积木箱子,conda 是搭积木的手,Jupyter Notebook 是展示积木的舞台。我们一步步来。
3.1 为什么选 Anaconda 而不是裸 Python?
刚入行那会儿我也喜欢从 python.org 下载原始 Python,然后手动 pip install 每一个包。后来发现,生物信息学项目之间依赖冲突太频繁了——Scanpy 要 scipy>=1.7,但某个下游工具非要 1.5。你想想看,pip 全局安装基本上就是赌运气。
Anaconda 的核心优势:
- 环境隔离:每个项目一个虚拟环境,互不干扰。
- 二进制预编译:很多生物信息包(比如 h5py、numpy)包含 C 扩展,conda 直接从官方源下编译好的 .so 文件,省去本地编译的麻烦。
- 跨平台一致:我在 Windows 上配好的环境,复制到 Linux 服务器,用
conda env export > environment.yml转过去,基本能秒还原。
3.2 安装 Anaconda / Miniconda
去 repo.anaconda.com 下载对应操作系统的安装包。建议选 Python 3.9 或 3.10 的版本,太新(比如 3.12)有些旧版单细胞包还没适配。
安装过程非常简单,我直接贴 Linux 上的命令:
# 下载 Miniconda(推荐)
wget https://repo.anaconda.com/miniconda/Miniconda3-py39_24.7.1-0-Linux-x86_64.sh
# 运行安装脚本
bash Miniconda3-py39_24.7.1-0-Linux-x86_64.sh
# 一路回车 + yes,默认路径 ~/miniconda3
安装完后记得重新打开终端,或者执行 source ~/.bashrc。验证一下:
conda --version
# 应该输出类似 conda 24.7.1
python 命令指向了系统的 Python 2.x。解决方案是确保 ~/miniconda3/bin 在 PATH 最前面,用 which python 检查。
3.3 conda 基础操作与通道配置
conda 就像一个包管家。我们常用的是 conda install,但直接装会很慢,因为默认的 anaconda.org 主站在美国。我建议先配置国内镜像,或者至少把 conda-forge 通道优先级调高。
配置 conda-forge 通道:
conda config --add channels conda-forge
conda config --set channel_priority strict
这样,以后安装任何包,conda 都会优先从 conda-forge 拉取。注意 strict 模式会强制解决依赖时不混用其他通道的包,这样不容易冲突。
常用命令速查表:
| 操作 | 命令 | 备注 |
|---|---|---|
| 创建环境 | conda create -n scanpy_env python=3.9 |
-n 后面是环境名 |
| 激活环境 | conda activate scanpy_env |
Linux/macOS 直接激活 |
| 退出环境 | conda deactivate |
回到 base |
| 安装包 | conda install scanpy harmony-pytools |
可以一次装多个 |
| 列出环境 | conda env list |
带星号的是当前激活的 |
| 导出环境 | conda env export > environment.yml |
给同事或服务器用 |
| 从文件创建 | conda env create -f environment.yml |
完全复刻 |
| 删除环境 | conda env remove -n scanpy_env |
磁盘空间不够就用 |
举个实际例子,我为这个课程专门创建了一个环境:
conda create -n singlecell_harmony python=3.9
conda activate singlecell_harmony
conda install -c conda-forge scanpy python-igraph leidenalg
conda install -c bioconda harmony-pytools
个人经验:我在项目中遇到过 harmony-pytools 和 scanpy 版本不兼容的情况。解决办法是先把 scanpy 装好,再装 harmony,如果冲突就指定版本:conda install harmony-pytools=0.1.6。
3.4 Jupyter Notebook 配置与使用
环境配好了,还没完。我们总不能每次都在终端里敲 Python 吧?Jupyter Notebook / Jupyter Lab 才是交互式数据分析的主战场。尤其对于单细胞分析:你一边调参数,一边看 UMAP 图,Notebook 是绝配。
3.4.1 安装 Jupyter
在刚刚创建的环境里安装:
conda activate singlecell_harmony
conda install jupyter jupyterlab
conda install ipykernel # 让内核能识别这个环境
然后把这个环境注册为一个 Jupyter 内核:
python -m ipykernel install --user --name singlecell_harmony --display-name "Python (singlecell)"
这样你在 Jupyter 里新建 Notebook 时,就可以选择 "Python (singlecell)" 内核,自动使用我们配好的环境。不会跟 base 环境串包。
3.4.2 启动与基础操作
在终端里输入:
jupyter notebook
浏览器会自动打开,地址一般是 http://localhost:8888。注意那个 token 字符串,如果你是用远程服务器,需要记录下来。
我习惯用 Jupyter Lab,它更像一个 IDE:
jupyter lab
常用快捷键:
- Shift + Enter:执行当前单元格并跳到下一个。
- Ctrl + Enter:执行当前单元格,不移动。
- Esc + M:把单元格切换为 Markdown(用来写文档)。
- Esc + Y:切换回代码模式。
- Esc + A:在当前单元格上方插入新的单元格。
- Esc + B:在当前单元格下方插入新的单元格。
3.4.3 远程服务器上使用 Jupyter Notebook
很多生物信息分析是在 Linux 服务器上进行的,你没桌面环境怎么办?端口转发可以搞定。我在实验室服务器上经常这么干:
# 在你的本地终端执行(不是服务器)
ssh -L 8888:localhost:8888 youruser@yourserver
# 然后在服务器上启动 jupyter notebook --no-browser --port=8888
之后用本地浏览器访问 http://localhost:8888 就能连上服务器的 Notebook。注意安全——如果服务器对外开放,最好设置一个密码:
jupyter notebook password
--no-browser,结果服务器试图打开浏览器,但服务器没有 GUI,导致报错。还有一次因为端口 8888 被占用了,启动失败。解决办法:指定其他端口 --port=8899。
3.5 完整环境搭建流程图
3.6 验证环境是否正常
环境搭好之后,我们跑个最小测试。在 Jupyter 里新建一个 Notebook,选 "Python (singlecell)" 内核,执行:
import scanpy as sc
print(sc.__version__)
# 应该输出类似 1.10.1
import scanpy.external as sce
print(sce.__version__)
# 如果 harmony 可用,应该输出 0.4.1 左右
# 测试导入 harmony
from harmonypy import run_harmony
print("Harmony 导入成功")
如果前三行报错,说明 scanpy 或者 harmony-pytools 没装好。我曾经遇到过 import scanpy.external 失败的情况,那是缺少 harmony-pytools 包,重新装一下就行。
如何卸载重装?
conda remove scanpy harmony-pytools
conda install -c bioconda harmony-pytools==0.1.6
conda install scanpy
小提示:conda 的 solve 过程有时会很慢,尤其包多的时候。你可以加 --verbose 看进度,或者直接用 mamba 替代 conda(conda install mamba -c conda-forge)。mamba 用 C++ 重写了依赖解析,速度能快 5~10 倍。
3.7 避坑指南
- 我曾经因为忘记激活环境,直接在 base 里装了 scanpy,结果跑到一半发现缺包。每次开新终端第一件事就是
conda activate singlecell_harmony,养成肌肉记忆。 - 我曾经在 Windows 上安装时,conda 自动下载了 Linux 版本的包(因为源没配置好)。记得用
conda config --show channels检查通道,确保全是 conda-forge。 - Jupyter 内核列表里如果找不到新注册的环境,试试重启 Jupyter 服务,或者手动刷新
jupyter kernelspec list检查是否注册成功。 - 内存不足:单细胞数据动辄几万个细胞,如果你的电脑只有 8GB 内存,建议在 Jupyter 里加上
%load_ext memory_profiler随时监控。实在不行就用 Google Colab 或者租云端 GPU 实例。
3.8 小结
这一章我们干了三件事:装好 conda、配置虚拟环境、搞定 Jupyter。这些都是基本功,但也是后面所有分析的基础。下次你拿到一个新的单细胞数据,直接激活这个环境,就能跑 Scanpy 了。