4. Python 环境搭建与生物信息学库
做分子 PDB 结构验证,说白了就是跟一堆数据处理、结构解析、数值计算打交道。Python 本身不带这些功能,得靠生态里的几个核心库撑起来。
我个人习惯,只要涉及科研计算的项目,都先开一个干净的虚拟环境。你想想看,一个项目装 Biopython,另一个项目装 RDKit 的老版本,全局装来装去迟早出问题。为了避免这种糟心事,咱们还是在项目一开始就把环境搭稳。
4.1 虚拟环境:把冲突扼杀在摇篮里
Python 的虚拟环境工具不少,我常用的是 venv 和 conda。如果你只用纯 Python 包,venv 够轻量;要是涉及到 RDKit 这种带 C++ 扩展的库,conda 更省心。
pip install rdkit 装成功过,但换到 Windows 时踩了编译器的坑。后来我学乖了 —— 只要用 RDKit,直接上 conda,省掉半小时折腾。
创建环境很简单:
# 用 venv
python3 -m venv mol_env
source mol_env/bin/activate # Linux/macOS
mol_env\Scripts\activate # Windows
# 用 conda(推荐 RDKit 场景)
conda create -n mol_env python=3.9
conda activate mol_env
环境名我一般叫 mol_env 或 pdb_check,随你开心。记得 Activate 之后,终端前面会多一个 (mol_env) 前缀,看到它就知道当前在隔离环境里。
4.2 Biopython:PDB 解析的基石
Biopython 是处理生物序列和结构的元老级库。它的 Bio.PDB 模块能直接读 PDB 文件、遍历原子、计算距离。我在项目中遇到过用 Biopython 批量提取蛋白质活性位点残基的场景,几百个 PDB 文件几分钟就跑完了。
安装:
pip install biopython
验证:
python -c "from Bio.PDB import PDBParser; print('Biopython 安装成功')"
常用功能一览:
| 模块 | 用途 |
|---|---|
Bio.PDB.PDBParser | 解析 PDB 文件为 Structure 对象 |
Bio.PDB.PDBIO | 写回 PDB 文件 |
Bio.PDB.ResidueDepth | 计算残基深度(需 MSMS 工具) |
Bio.PDB.DSSP | 二级结构分配 |
Bio.SeqIO | 读取序列文件(FASTA 等) |
PDBParser 可能报错。我曾经就被一个格式不规范的 PDB 文件卡了半天,后来用 Bio.PDB.PDBParser(QUIET=True) 跳过警告才解决。
4.3 MDAnalysis:分子动力学轨迹的瑞士军刀
MDAnalysis 最初是为分子动力学轨迹设计的,但它的原子选择语法和拓扑分析能力很强,做 PDB 批次处理也非常顺手。它能把 PDB 里的原子、残基、链组织成类似“宇宙-体系-片段-残基-原子”的层级结构,想选哪一层都行。
安装:
pip install MDAnalysis
快速测试:
python -c "import MDAnalysis as mda; print('MDA 版本:', mda.__version__)"
我个人喜欢它的一点是,可以用一行代码选出所有 Cα 原子:
import MDAnalysis as mda
u = mda.Universe('protein.pdb')
ca = u.select_atoms('name CA') # 秒选所有 Cα
print(len(ca), ca.positions.shape)
对于大批量 PDB 验证,我会用 MDAnalysis.transformations 做坐标变换,比如把所有结构对齐到参考构象上。这在后面章节的 RMSD 计算里会频繁用到。
4.4 RDKit:化学信息学的强力引擎
RDKit 能干的事太多了 —— 小分子指纹、子结构匹配、构象生成、力场优化……做 PDB 相似性验证时,它最常用的是把 PDB 里的配体或者小分子提取出来,做分子对比如 Tanimoto 相似度。
安装(强烈建议用 conda):
conda install -c conda-forge rdkit
如果用 pip 安装,需要先装好 cmake、boost 等依赖,比较麻烦。我试过在 macOS 上 pip install rdkit-pypi 成功了,但 Windows 上还是乖乖用 conda 吧。
验证:
python -c "from rdkit import Chem; mol = Chem.MolFromSmiles('CCO'); print('分子:', Chem.MolToSmiles(mol))"
RDKit 做分子相似性的基本操作:
from rdkit import Chem
from rdkit.Chem import AllChem, DataStructs
mol1 = Chem.MolFromPDBFile('ligand1.pdb')
mol2 = Chem.MolFromPDBFile('ligand2.pdb')
fp1 = AllChem.GetMorganFingerprintAsBitVect(mol1, 2, nBits=2048)
fp2 = AllChem.GetMorganFingerprintAsBitVect(mol2, 2, nBits=2048)
sim = DataStructs.TanimotoSimilarity(fp1, fp2)
print(f'Tanimoto 相似度: {sim:.3f}')
4.5 其他值得关注的库
除了上面三个“主力”,做 PDB 批次验证时还会用到这些:
- OpenBabel:格式转换王,能从 PDB 转成 SDF、MOL2、XYZ 等。安装:
conda install -c openbabel openbabel - PyMOL:可视化与脚本批处理,可结合
pymol2无头模式在 Python 里调用。 - ProDy:专为蛋白质动力学设计,支持主成分分析、弹性网络模型等,适合做构象集合对比。
这些库不是每次都用,但了解它们在,项目后期遇到特定需求时不至于手忙脚乱。
4.6 本章知识体系
4.7 快速验证脚本
环境搭好之后,我习惯跑一个“全家桶”验证脚本,确认所有库都能正常导入并做点简单操作。省得到后面写代码时才发现某个库没装好。
# check_env.py
errors = []
try:
from Bio.PDB import PDBParser
print("[OK] Biopython")
except ImportError as e:
errors.append(f"Biopython: {e}")
try:
import MDAnalysis as mda
print("[OK] MDAnalysis")
except ImportError as e:
errors.append(f"MDAnalysis: {e}")
try:
from rdkit import Chem
mol = Chem.MolFromSmiles('CCO')
print("[OK] RDKit")
except Exception as e:
errors.append(f"RDKit: {e}")
if errors:
print("\n❌ 以下库有问题:")
for e in errors:
print(" ", e)
else:
print("\n🎉 所有核心库就绪!")
保存为 check_env.py,然后在激活的环境里跑 python check_env.py。看到三个绿色的 OK,环境就稳了。
4.8 避坑指南
- Biopython 版本问题:Biopython 1.78 之后对 PDB 解析做了一些修改,旧版代码里
get_list()等接口可能报错。升级到 1.80+ 是最好的选择。 - RDKit 与 Python 版本兼容:RDKit 通常滞后于最新的 Python 小版本。比如 Python 3.12 刚出时,RDKit 等了一个季度才发布兼容包。稳妥起见,用 Python 3.9~3.11 之间。
- MDAnalysis 读取 PDB 顺序:MDAnalysis 默认按照原子在 PDB 文件中的顺序编号。如果文件里原子索引不连续(比如删除了某些残基),选出来的原子位置可能跟期望不符。检查时可以用
print(u.residues)先看看残基序列。