第2章 Python环境搭建:Anaconda安装、创建虚拟环境、安装核心库
做空间转录组分析,第一步就是搭环境。说实话,我见过太多人在这一步翻车了——不是库冲突就是版本对不上,折腾半天还没开始写代码。我记得刚开始做空间转录组项目时,光配环境就花了两天,后来学乖了,用Anaconda+虚拟环境,一次性搞定。
这一章,咱们把环境搭结实。后面30章的所有分析代码,都跑在这个环境上。
2.1 为什么需要统一的环境管理
你想想看,空间转录组分析涉及多少库?Scanpy做核心分析,Squidpy处理空间信息,matplotlib绘图,pandas处理数据……每个库又有自己的依赖版本要求。直接往系统Python里装,早晚出乱子。
Anaconda解决了这个问题。它自带Python、包管理器和虚拟环境功能。说白了,就是给你的每个项目建一个独立的小房间,互不干扰。
我个人习惯,每个项目都用独立的conda环境。这样换项目时不用重新装系统,切个环境就行。
环境管理核心原则:
- 每个项目一个独立虚拟环境
- 记录环境配置,方便复现
- 定期更新核心库,但不要追最新版
2.2 Anaconda的安装与配置
Anaconda的安装不复杂,各平台都有对应的安装包。这里我列一下关键步骤。
下载安装
去Anaconda官网下载对应系统的安装包。Windows选exe,macOS选pkg,Linux选sh脚本。
安装完成后,验证一下:
conda --version
# 正常输出类似:
# conda 24.1.2
如果提示找不到命令,通常是环境变量没配好。Windows用户在安装时勾选"Add Anaconda to my PATH",Linux/macOS用户检查~/.bashrc或~/.zshrc里是否添加了Anaconda的路径。
小技巧: 我在Windows上遇到过路径含中文导致conda无法正常激活的问题。解决方案很简单——安装路径全英文,别用中文用户名。
2.3 创建独立的虚拟环境
为什么要创建虚拟环境?说白了就是为了隔离。你跑项目A时用Scanpy 1.9,项目B用Scanpy 1.10,两个环境互不打架。
我建议给环境起名时带上项目标识,方便以后识别。
# 创建环境,指定Python版本
conda create -n sap_transcriptomics python=3.9
# 激活环境
conda activate sap_transcriptomics
# 确认Python版本
python --version
环境激活后,命令行前面会出现环境名,像这样:
(sap_transcriptomics) $
看到这个提示,说明你已经在虚拟环境里了。后面安装的所有库都只在这个环境里生效。
注意: 每次新开终端,都要先激活环境。我曾经因为忘了激活,把库装到了base环境里,结果项目跑起来各种报错。养成习惯——开终端先conda activate。
2.4 安装核心分析库
环境建好了,开始装库。空间转录组分析的核心库就这么几个,我按安装顺序列出来。
| 库名 | 建议版本 | 用途 | 安装命令 |
|---|---|---|---|
| Scanpy | ≥1.9 | 单细胞/空间转录组核心分析 | pip install scanpy |
| Squidpy | ≥1.2 | 空间转录组专用分析 | pip install squidpy |
| matplotlib | ≥3.6 | 可视化基础库 | pip install matplotlib |
| pandas | ≥1.5 | 数据处理与表格操作 | pip install pandas |
| numpy | ≥1.24 | 数值计算与矩阵运算 | pip install numpy |
| leidenalg | 最新 | 聚类算法(Leiden) | pip install leidenalg |
| python-igraph | 最新 | 图数据结构与分析 | pip install python-igraph |
实际安装时,一条命令装完所有库:
pip install scanpy squidpy matplotlib pandas numpy leidenalg python-igraph
这里要注意顺序。我个人习惯先装numpy和pandas,再装Scanpy和Squidpy。虽然pip会自动处理依赖,但分批装更容易定位问题。
踩坑提醒: 我在项目中遇到过Scanpy和Squidpy版本不匹配的问题。当时装了Scanpy 1.8和Squidpy 1.1,跑空间可变基因分析时直接报错。后来统一升级到最新版才解决。建议装之前看一眼两个库的兼容性说明。
2.5 验证环境是否成功
库装完了,别急着开干。先验证一下所有库能不能正常导入。我通常用一个小脚本做全量检查:
# 验证脚本:check_env.py
import sys
print(f"Python 版本: {sys.version}")
import numpy as np
print(f"numpy 版本: {np.__version__}")
import pandas as pd
print(f"pandas 版本: {pd.__version__}")
import matplotlib
print(f"matplotlib 版本: {matplotlib.__version__}")
import scanpy as sc
print(f"Scanpy 版本: {sc.__version__}")
import squidpy as sq
print(f"Squidpy 版本: {sq.__version__}")
import igraph
print(f"igraph 版本: {igraph.__version__}")
import leidenalg
print(f"leidenalg 版本: {leidenalg.__version__}")
print("\n✅ 所有库导入成功,环境配置完成!")
运行这个脚本:
python check_env.py
如果所有库都能正常导入并打印版本号,说明环境搭建成功了。
我的一点经验: 验证环境这一步别跳过。我曾经自认为装好了,结果一跑分析代码,发现少了python-igraph,Leiden聚类直接报错。浪费了半小时排查。5分钟的验证,能省下后面大量的调试时间。
2.6 避坑指南与小结
环境搭建看起来简单,但坑不少。我把自己踩过的坑列出来,你遇到了可以直接翻到这里看。
常见问题与解决方法:
- pip安装慢: 用国内镜像源,比如清华或阿里云的镜像。
- 库版本冲突: 优先用conda装,conda的依赖解析比pip更严格。实在不行再混用pip。
- 导入时提示找不到库: 看看是不是忘了激活虚拟环境。
- Windows上igraph报错: 先装python-igraph,再装leidenalg,顺序别反。
- macOS M1/M2芯片: 部分库需要ARM64版本,用conda装一般会自动处理。
环境导出与复现:
环境配好后,我建议你导出一份配置文件。以后换电脑或者分享给同事,一条命令就能完全复现。
# 导出环境配置
conda env export -n sap_transcriptomics -f environment.yml
# 别人拿到后,用这个文件重建环境
conda env create -f environment.yml
本章要点回顾:
- Anaconda是环境管理的基础,安装时注意路径不要含中文
- 每个项目建一个独立虚拟环境,用conda create创建
- 核心库包括Scanpy、Squidpy、matplotlib、pandas、numpy、leidenalg、python-igraph
- 安装后用验证脚本检查所有库能否正常导入
- 导出environment.yml方便环境复现
环境搭好了,后面就可以安心做分析了。说实话,环境配置这一步虽然枯燥,但它是整个工具链的基石。你在这里花半小时,后面能省下数倍的时间。