第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
小提示: 如果你在 macOS 或 Linux 上,装完记得执行 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
注意: 别用 pip install rdkit 或者 pip install rdkit-pypi,那玩意要么是老版本要么是阉割版。我曾经为了省事用过一次,结果计算 3D 描述符时直接报 segment fault。

验证安装

激活环境后,执行:

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 .
常见坑: 如果你用方法二且遇到编译错误,大概率是 RDKit 路径没被找到。解决办法:先确认 RDKit 已安装,然后执行 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
我自己的习惯: 所有库装好后,我会先跑一个完整的小测试,确保整个链路通顺。测试脚本包含:读取 SMILES → 计算 Mordred 描述符 → 用 PCA 降维 → 画图。这样发现问题能当场定位,避免以后做项目时突然卡壳。

4.5 整体安装流程一览

下面这张流程图把整个环境的依赖关系说清楚了:

环境搭建依赖与安装流程 Python 3.9~3.11 conda 虚拟环境 RDKit (conda-forge) Mordred (pip) pandas/scikit-learn... 虚线箭头表示 Mordred 依赖 RDKit,必须先装 RDKit

看到这张图,你应该能理解为什么我反复强调顺序。箭头方向就是安装顺序——先 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)
环境搭建完成,所有库正常工作!
避坑指南: 如果看到类似 "ModuleNotFoundError: No module named 'mordred'" 或 "ImportError: libmordred.so: cannot open shared object file",别急着重装。先检查 conda list | grep rdkit 看看 RDKit 是不是在那个环境里。我曾经犯过这种低级错误——激活了环境却忘记装 RDKit,还以为 Mordred 装坏了。

好了,到这为止你的环境就搭完了。接下来我们就可以愉快地读取分子数据、计算海量描述符、然后做降维分析了。