4. 环境搭建:Python环境、RDKit安装、验证、虚拟环境管理
搞化学信息学,第一步该做什么?
我的答案是——先把环境搭明白。
这可不是套话。我见过太多人在代码跑了一半才发现依赖冲突,然后痛苦地重装整个Python。说实话,这事我干过不止一次。所以这次咱们把话说在前头:花半小时搞好环境,后面能省你三天时间。
4.1 为什么非要先折腾环境?
Python好装,但把RDKit装好、装对、装稳,没那么简单。
RDKit背后是C++写的底层化学算法。它不像纯Python库那样pip一下就能跑。你想想看,如果依赖的Boost版本不对,或者编译器位数不匹配,那import rdkit的时候就会给你抛出一堆看不懂的错误。
我之前带过一个实习生,他在Windows上直接pip install rdkit,结果报错折腾了一整天。后来我让他用conda装,十分钟搞定。原因是什么?RDKit官方推荐的就是conda,因为conda能处理好那些C++依赖。
环境搭建的核心目标:
- 一个干净的Python环境——不和其它项目打架
- RDKit正确安装——能import,能跑,不出Segment Fault
- 测试通过——确认核心功能都能用
4.2 Python环境选择:我为什么推荐Miniconda
Python环境管理工具有很多。virtualenv、pipenv、poetry……但做化学信息学,我个人习惯用Miniconda。
原因很简单:conda不只是管Python包,它还能管非Python的依赖库。RDKit底层依赖的Boost、NumPy、Pandas这些,conda都能帮你一次性解决好版本问题。
提示:Miniconda是Anaconda的精简版,只包含conda和Python,没有那些你用不上的预装包。小、快、干净,适合我们这种需要精确控制环境的人。
如果你还没装Miniconda,去官网下载对应系统的安装包。
装好之后验证一下:
conda --version
能看到版本号,就算装好了。
特别提醒:安装时如果问你要不要初始化conda,选yes。不然你得手动配置PATH,麻烦。
4.3 创建虚拟环境:给RDKit一个单独的房间
我不建议大家把RDKit装到base环境里。原因很简单——base环境是conda自带的,万一你搞乱了,整个conda都可能出问题。
我习惯新建一个环境,专门做化学信息学项目用。
conda create -n chem_env python=3.10
这条命令的意思:创建一个名叫chem_env的虚拟环境,Python版本指定为3.10。
为什么要用3.10?因为我试过,3.10和RDKit兼容性最好,而且Python 3.10之后的一些新特性写起来确实顺手。
创建完成后,激活这个环境:
conda activate chem_env
你会看到命令行前面多了个(chem_env),这就说明你已经进到这个独立环境里了。
一个小技巧:我习惯把环境名起得有意义。比如chem_env、smiles_clean、ml_work这种,一看就知道干什么用的。别起test1、test2,后面你自己都分不清哪个是哪个。
4.4 安装RDKit:两种方法,我告诉你哪种靠谱
老生常谈的问题:RDKit到底该怎么装?
网上有说pip装的,有说源码编译的,也有说用conda装的。我自己三种都试过,结论如下:
| 安装方式 | 耗时 | 成功率 | 推荐度 |
|---|---|---|---|
| pip install rdkit | 几分钟 | 低(容易遇到C++编译问题) | 不推荐 |
| 手动编译源码 | 半小时以上 | 看缘分 | 除非你是RDKit开发者 |
| conda install -c conda-forge rdkit | 几分钟 | 接近100% | 强烈推荐 |
看到了吧?conda是最省心的。我在Windows、macOS、Linux上都试过,没出过问题。
具体命令:
conda install -c conda-forge rdkit
加-c conda-forge的意思是告诉conda去conda-forge这个频道下载。conda-forge是社区维护的频道,更新快,包也全。RDKit官方就推荐从这个频道装。
避坑指南:我曾经试过用defaults频道装RDKit,结果装了老的2020版本,很多新功能没有。conda-forge里的RDKit通常是最新的。所以,老老实实用conda-forge。
4.5 验证安装:确认RDKit能正常工作
装完了别急着走。验一下,确保真的能用。
我一般三步走:
- 检查导入——看有没有ImportError
- 检查版本——看版本号对不对得上预期
- 跑个简单测试——确认基本功能正常
在刚刚激活的环境里,运行Python:
python
然后依次输入:
from rdkit import Chem
print(Chem.__version__)
能看到版本号,比如2024.03.1,就说明装成了。
再测一个基础功能,画一个分子:
from rdkit.Chem import Draw
mol = Chem.MolFromSmiles('CCO')
print(mol.GetNumAtoms())
# 应该输出 3
如果输出是3,恭喜你,RDKit环境搭好了。
提醒一下:如果你在Jupyter Notebook里用RDKit,记得安装ipykernel:
conda install ipykernel
python -m ipykernel install --user --name chem_env --display-name "ChemEnv"
这样你的Jupyter里就能找到这个环境了。
4.6 虚拟环境管理:几个常用操作
做项目时间长了,你会创建好几个环境。怎么管理它们?下面是我经常用的命令:
# 查看本地所有环境
conda env list
# 导出当前环境的依赖列表
conda list > requirements.txt
# 从文件恢复环境
conda create -n new_env --file requirements.txt
# 删除一个环境
conda remove -n chem_env --all
# 复制环境
conda create -n chem_env_backup --clone chem_env
个人经验:每做一个重要项目之前,我都导出一份requirements.txt存着。万一环境崩了,直接重建,十分钟恢复原样。相信我,这习惯能救你很多次。
4.7 整个流程一览
把上面说的串起来,完整流程如下:
# 第一步:安装Miniconda(如已安装则跳过)
# 官网下载安装包
# 第二步:创建并有虚拟环境
conda create -n chem_env python=3.10
conda activate chem_env
# 第三步:安装RDKit
conda install -c conda-forge rdkit
# 第四步:验证
python -c "from rdkit import Chem; print(Chem.__version__)"
看到版本号,就说明一切正常。
4.8 常见问题与解决
- 问题:conda install时进度条卡住
- 解决:换个网络或者换国内镜像。比如清华的conda镜像:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- 问题:import rdkit时报错“DLL load failed”
- 解决:大概率是Python位数和RDKit不匹配。所有组件都用64位。
- 问题:conda命令找不到
- 解决:添加conda到PATH,或者重新安装时选择“Add to PATH”。
重要提醒:千万不要在base环境里pip install rdkit。如果装了,先删掉。然后退出base,用conda新建环境再装。我见过有人base环境被搞乱了,最后花了半天重装整个conda。
4.9 本章知识图谱
下面这张图能帮你理清整个环境搭建的工作流:
看完这张图,你应该清楚了:从操作系统开始,装Miniconda,建虚拟环境,安装RDKit,最后验证。每一步都有它的道理。跳过任何一步,都可能在后面踩坑。
最终测试:
如果你能成功运行下面的代码段并看到版本号,那环境搭建这一步,你就彻底通关了。
from rdkit import Chem
from rdkit.Chem import Draw, Descriptors
from rdkit import __version__
print(f"RDKit 版本: {__version__}")