化学信息学环境搭建:Python库安装、RDKit配置、Jupyter环境
环境搭建这事儿,说简单也简单,说坑也是一堆。我最早接触化学信息学时,光装RDKit就折腾了一下午,因为那时候还不懂Python虚拟环境这些概念。其实只要你按部就班走,15分钟就能搞定。
我们先看看整个环境依赖的层次关系,这样你心里有个谱。
1. Python 版本选择
RDKit 对 Python 版本很敏感。我个人习惯用 Python 3.9 或 3.10,这两个版本在 RDKit 2023.09 LTS 上跑得最稳。Python 3.12 目前还有兼容性问题,建议先别碰。
检查一下你的 Python 版本:
python --version
# 如果看到 Python 3.8.x - 3.11.x,没问题
# 如果是 3.12+,嗯……建议降级
我之前带过一个项目,团队有人装了 Python 3.12,RDKit 死活装不上,最后回退到 3.10 才解决。这类问题最耗时,所以先打好基础。
2. 创建虚拟环境
虚拟环境是每个 Python 项目的独立空间。说白了就隔离不同项目的包,互不干扰。我推荐用 conda 管理 RDKit,因为它直接提供预编译包,省去编译的麻烦。
# 用 conda 创建环境
conda create -n chem_env python=3.10
# 激活环境
conda activate chem_env
osx-arm64 平台,否则 RDKit 可能装不上 arm 原生版本。命令参考:CONDA_SUBDIR=osx-arm64 conda create -n chem_env python=3.10
要是你更习惯用 virtualenv,也行。就是 RDKit 编译那一步稍微复杂点,我个人感觉不如 conda 省心。
# 用 virtualenv
python -m venv chem_env
source chem_env/bin/activate # Linux/Mac
# chem_env\Scripts\activate # Windows
3. 安装 RDKit
核心步骤来了。RDKit 是化学信息学的瑞士军刀,解析 SMILES、画分子结构图、计算分子描述符,都靠它。
# conda 安装(推荐)
conda install -c conda-forge rdkit
# 或者指定版本
conda install -c conda-forge rdkit=2023.09.6
pip install rdkit 直接装。pip 会从源码编译,你的机器上如果没有 C++ 编译工具链,会报一堆红字错误。我曾经眼睁睁看着同事编译了 40 分钟然后失败……嗯,直接用 conda 多好。
验证安装是否成功:
python -c "from rdkit import Chem; print(Chem.MolFromSmiles('CCO')); print('RDKit OK')"
如果输出一个 <rdkit.Chem.rdchem.Mol object at 0x...> 以及“RDKit OK”,恭喜你,环境通了。
4. 安装科学计算扩展库
RDKit 虽然强,但处理批次数据和可视化还需要几个好搭档。其实这些库你后面做统计分析和画图都会用到。
# 一行安装所有常用库
conda install -c conda-forge numpy pandas matplotlib seaborn jupyter ipykernel
# 或者用 pip
pip install numpy pandas matplotlib seaborn jupyter
| 库名 | 作用 | 典型用法 |
|---|---|---|
| numpy | 数组与矩阵运算 | 处理分子描述符矩阵、批量数学变换 |
| pandas | 数据框操作 | CSV 中存 SMILES、分组统计分析 |
| matplotlib | 基础绘图引擎 | 绘制分子性质分布图、物理化学性质散点图 |
| seaborn | 统计可视化 | 联合分布图、热图展示分子多样性 |
| jupyter | 交互式笔记本 | 可视化调试、分步分析 SMILES |
你想想看,如果只有 RDKit 没有 pandas,你处理一千个 SMILES 还得手动写循环,多累。这些库组合在一起,才是真正干活的状态。
5. 配置 Jupyter Notebook 内核
环境装好了,但 Jupyter 默认还在用系统 Python。你得把自己创建的虚拟环境注册成 Jupyter 内核。
# 在当前虚拟环境下安装 ipykernel
pip install ipykernel
# 注册内核
python -m ipykernel install --user --name chem_env --display-name "Chem (Python 3.10)"
启动 Jupyter:
jupyter notebook
# 或者新版 JupyterLab
jupyter lab
打开笔记本后,右上角 Kernel 菜单里选 "Chem (Python 3.10)",就能用上你刚配好的 RDKit 环境了。
from rdkit import Chem
from rdkit.Chem import Draw
mol = Chem.MolFromSmiles('CCO')
Draw.MolToImage(mol, size=(200, 200))
6. 避坑指南(我踩过的几个坑)
- 别用 root 装 RDKit。我早期干过这蠢事,结果把系统 Python 搞乱了,最后重装了系统。虚拟环境是底线。
- M1/M2 Mac 记得加 conda-forge 通道。默认通道里 RDKit 版本旧得离谱,而且可能是 x86 转译版本,性能差一大截。
- Jupyter 内核找不到包?大概率是你用了 base 内核。退出 Jupyter,切到虚拟环境再
jupyter notebook试试。 - Windows 用户注意路径空格。Anaconda 默认安装到
Program Files带空格的路径,偶尔会出奇怪的 ImportError。我遇到过一回,最后乖乖重装到C:\Anaconda3就没事了。 - pip 和 conda 混用出问题?建议先 conda 装 RDKit 和核心科学计算库,实在缺的再用 pip,不要来回混着用。
7. 环境完整性自检
最后跑一下这个脚本,确保所有组件都能正常调通。我觉得这一步值得养成习惯,每次在新机器上搭环境都跑一遍,能省不少排查时间。
import sys
import numpy as np
import pandas as pd
import matplotlib
import rdkit
print(f"Python 版本: {sys.version}")
print(f"NumPy 版本: {np.__version__}")
print(f"Pandas 版本: {pd.__version__}")
print(f"Matplotlib 版本: {matplotlib.__version__}")
print(f"RDKit 版本: {rdkit.__version__}")
# 测试 RDKit 核心功能
from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O')
if mol:
mw = Descriptors.MolWt(mol)
print(f"阿司匹林分子量: {mw:.2f} g/mol")
print("所有库调用正常,环境就绪!")
输出类似这样的信息就对了:
Python 版本: 3.10.12 (main, Jul 5 2023, 14:03:55) [Clang 14.0.6]
NumPy 版本: 1.26.4
Pandas 版本: 2.2.2
Matplotlib 版本: 3.8.4
RDKit 版本: 2023.09.6
阿司匹林分子量: 180.16 g/mol
所有库调用正常,环境就绪!
看到这个,你就可以放心开始后面的 SMILES 批次分析了。环境搭好了,后面的所有案例才有得玩。