第4章 环境搭建:Python、RDKit、Mordred 安装
做 ADMET 分子描述符分析,第一步就是搭环境。这事看起来简单,但我在项目里见过太多人卡在这一步——版本不兼容、路径配不对、编译失败……嗯,今天我把整个流程拆开讲清楚。
我自己的经验是:先建虚拟环境,再装核心库。别偷懒,否则后面各种冲突会让你崩溃。
4.1 Python 环境准备
我用的是 Python 3.9~3.11 系列,RDKit 和 Mordred 在这几个版本上最稳。你想想看,Python 3.12 刚出来时我就踩过坑——某些依赖还没跟上。
个人习惯用 conda 管理环境,因为它对 RDKit 这种有 C++ 扩展的库特别友好。
安装 Miniconda 或 Anaconda
从官网下载对应系统的安装包,一路默认就好。装完后验证一下:
conda --version
# 正常输出类似:conda 23.10.0
conda init,否则终端找不到命令。我当初就忘过这一步,折腾了十分钟。
创建虚拟环境
我会专门为这个教程建一个干净的环境:
conda create -n admet_demo python=3.10 -y
conda activate admet_demo
看到命令行前面变成 (admet_demo) 就对了。环境隔离是所有后续操作的基础,千万别在 base 环境里乱装东西。
4.2 安装 RDKit
RDKit 是计算化学描述符的核心。它支持 SMILES 解析、分子指纹、2D/3D 描述符等等。之前在项目中我用它处理过 10 万级分子库,速度还不错。
直接用 conda 安装
这是最省心的方式,因为 conda 会自动处理底层依赖(比如 Boost、numpy 的版本):
conda install -c conda-forge rdkit -y
验证安装
激活环境后,执行:
python -c "from rdkit import Chem; print(Chem.__version__)"
# 应该输出类似:2023.09.1
如果没报错,说明 RDKit 装好了。我习惯顺手测试一个简单分子:
python -c "from rdkit import Chem; m = Chem.MolFromSmiles('CCO'); print(m.GetNumAtoms())"
# 输出 3 (乙醇有3个非氢原子)
4.3 安装 Mordred
Mordred 是一个基于 RDKit 的分子描述符计算库,能输出 1800+ 个描述符。但要注意,它需要 RDKit 已经装好才能编译成功。
安装顺序:先装 RDKit,再装 Mordred。这个顺序我反复强调过——倒过来装你会遇到一堆诡异的链接错误。
两种方式任选:
方法一(推荐):
pip install mordred
方法二(源码安装,适合需要定制版本):
git clone https://github.com/mordred-descriptor/mordred.git
cd mordred
pip install .
pip install --no-cache-dir -e .
验证 Mordred
python -c "from mordred import Calculator, descriptors; print('Mordred loaded successfully')"
如果不报错,那恭喜你,环境基本成型。
4.4 其他辅助库
除了核心的 RDKit 和 Mordred,我还会装几个常用库,用来做数据处理和可视化:
| 库名 | 用途 | 安装命令 |
|---|---|---|
| pandas | 表格数据读写、清洗 | pip install pandas |
| numpy | 数值计算 | (通常已随 RDKit 安装) |
| scikit-learn | 降维算法(PCA、t-SNE 等) | pip install scikit-learn |
| matplotlib / seaborn | 绘制降维结果图 | pip install matplotlib seaborn |
| jupyter notebook | 交互式开发 | pip install jupyter |
4.5 整体安装流程一览
下面这张流程图把整个环境的依赖关系说清楚了:
看到这张图,你应该能理解为什么我反复强调顺序。箭头方向就是安装顺序——先 Python 环境,再到虚拟环境,然后 RDKit 和 Mordred,最后加辅助库。虚线箭头强调:Mordred 依赖 RDKit。
4.6 验证整体环境
所有东西装完后,我习惯用一个综合脚本来验证:
# test_env.py
from rdkit import Chem
from mordred import Calculator, descriptors
import pandas as pd
import numpy as np
# 测试 RDKit
mol = Chem.MolFromSmiles('c1ccccc1C(=O)O')
print(f"分子原子数: {mol.GetNumAtoms()}")
# 测试 Mordred
calc = Calculator(descriptors, ignore_3D=True)
desc = calc(mol)
print(f"描述符数量: {len(desc)}")
# 测试 pandas
df = pd.DataFrame([desc.asdict()])
print(f"DataFrame 形状: {df.shape}")
print("环境搭建完成,所有库正常工作!")
运行:
python test_env.py
正常输出:
分子原子数: 16
描述符数量: 1613
DataFrame 形状: (1, 1613)
环境搭建完成,所有库正常工作!
conda list | grep rdkit 看看 RDKit 是不是在那个环境里。我曾经犯过这种低级错误——激活了环境却忘记装 RDKit,还以为 Mordred 装坏了。
好了,到这为止你的环境就搭完了。接下来我们就可以愉快地读取分子数据、计算海量描述符、然后做降维分析了。