datamol 是构建在 RDKit 之上的轻量 Pythonic 封装库,用于分子化学信息学处理,所有分子对象都是原生 rdkit.Chem.Mol,因此与 RDKit 生态完全兼容。
用途:简化分子操作,适用于标准药物发现流程,包括 SMILES 解析、结构标准化、描述符与指纹计算、聚类、骨架与片段分析、3D 构象生成、化学反应应用、可视化,以及带并行化的批量处理和经 fsspec 的云存储读写。
安装:uv pip install datamol;导入约定:import datamol as dm。
主要能力与用法:
- 分子格式转换:dm.to_mol("CCO") 解析 SMILES(失败返回 None);dm.to_smiles、dm.to_inchi、dm.to_inchikey、dm.to_selfies 输出。建议对用户提供的分子使用 dm.sanitize_mol 或 dm.standardize_mol(disconnect_metals=True, normalize=True, reionize=True),字符串可用 dm.standardize_smiles。
- 文件读写:dm.read_sdf、dm.read_smi、dm.read_csv、dm.read_excel 及自动识别格式的 dm.open_df;写回用 dm.to_sdf、dm.to_smi、dm.to_xlsx。支持 s3://、GCS、HTTP 等远程路径。
- 描述符:dm.descriptors.compute_many_descriptors 计算单分子,batch_compute_many_descriptors 批量并行;另有芳香性、立体中心、刚性键等专项函数,可据此做 Lipinski 五规则筛选。
- 指纹与相似性:dm.to_fp(fp_type='ecfp'/'maccs'/'topological'/'atompair');dm.pdist、dm.cdist 计算距离,支持 n_jobs 并行。
- 聚类与多样性:dm.cluster_mols(Butina,cutoff 为 Tanimoto 距离阈值)、dm.pick_diverse、dm.pick_centroids。注意 Butina 会构建完整距离矩阵,适合约 1000 个分子,不适合 1 万以上。
- 骨架与片段:dm.to_scaffold_murcko 提取 Bemis-Murcko 骨架,可做骨架分组与基于骨架的机器学习训练/测试划分;dm.fragment.brics、dm.fragment.recap 进行片段化。
- 3D 构象:dm.conformers.generate(n_confs、rms_cutoff、minimize_energy、method='ETKDGv3')、dm.conformers.cluster、dm.conformers.return_centroids、dm.conformers.sasa。
- 可视化:dm.viz.to_image 支持网格、legends、align 对齐、highlight_atom/highlight_bond 高亮,输出现存 PNG 或 SVG;dm.viz.conformers 显示多构象。
- 化学反应:基于 rdkit 的 ReactionFromSmarts,用 dm.reactions.apply_reaction(rxn, (reactant,), sanitize=True) 应用反应,可批量处理并捕获异常。
并行:多数函数支持 n_jobs=1 顺序、n_jobs=-1 全部核心、n_jobs=4 指定核心,批量操作常支持 progress=True。
限制与注意:解析失败返回 None,需先判空;Butina 聚类规模受限,大数据集建议改用多样性选择或层次方法;机器学习划分建议按骨架拆分以避免泄漏;SAR 可视化建议对齐分子。更详细的 API 见 core_api、io_module、conformers_module、descriptors_viz、fragments_scaffolds、reactions_data 等参考文档。定价、平台与商业授权信息暂未提供。