Ubuntu 18.04下Vina与MGLTools批量分子对接环境搭建
简介这份 PDF 资料面向生物信息学、计算化学方向的学习者与科研人员聚焦 Ubuntu 18.04 环境下 Autodock Vina 批量分子对接及 Slurm 集群调度配置。内容围绕 Open Babel、Autodock Vina、MGLTools 的部署与协同使用展开涉及受体与配体预处理、对接参数设置、批处理脚本组织、结果格式转换以及 Slurm 作业调度文件的配置思路并记录依赖安装、环境变量调整和批处理循环执行等关键环节可帮助读者建立从单机试跑到集群批量提交的整体认知。资源包为 1 个 PDF 文件大小约 1013KB篇幅集中、便于查阅和留存。已有 5257 人学习适合需要搭建分子对接环境、理解批处理流程与调度逻辑的初中级用户参考也可作为药物设计和高性能计算场景下的实践型学习材料对批量任务的组织方式与结果汇总也有一定参考价值。1. 先把版本钉死Ubuntu 18.04 上 Vina 1.1.2 与 MGLTools 1.5.6 的依赖账很多人装 Autodock Vina 批量分子对接环境时第一反应是apt install autodock-vina再随手装个 Slurm结果卡在prepare_ligand4.py找不到、MGLTools 的install.py在 Python 3 下报语法错误。Ubuntu 18.04 Vina 1.1.2 MGLTools 1.5.6 这套组合不算新却是课程作业和小型集群里很常见的一套装不好单机跑不动批量三节点也调不起来。下面按我实际落盘的顺序把依赖、PATH、批处理脚本和 Slurm 分区一次装到位。2. 装 Autodock Vina 1.1.2 与 MGLTools 1.5.6目录、Python 2.7 和 PATH 的取舍2.1 依赖项不是凑数build-essential、csh、python-tk 各自管什么先把系统包索引更新掉再把编译工具、图形库、图像库和 Python 2 相关包装齐。MGLTools 1.5.6 里的install.py和prepare_*4.py都带 Python 2 语法Ubuntu 18.04 默认的python一般还是 2.7这一点比新版本省事但镜像一旦被改过update-alternatives就要显式用python2.7。# 更新索引装 MGLTools 编译和运行需要的依赖 sudo apt-get update sudo apt-get install -y build-essential libxt-dev libglu1-mesa-dev \ libxmu-dev libxi-dev libpng-dev libjpeg-dev libtiff-dev \ csh python-tk python-numpy python-dev python-pmwbuild-essential负责gcc、make这些基础编译链libxt-dev、libglu1-mesa-dev、libxmu-dev、libxi-dev是 MGLTools 图形组件常见的头文件依赖libpng-dev、libjpeg-dev、libtiff-dev处理图像格式csh是因为 MGLTools 的部分脚本按 csh 习惯写python-tk给 Tkinterpython-numpy给数值计算python-pmw是 MGLTools 会碰到的 Python 组件。这里不要图省事只装python3-devMGLTools 1.5.6 不认。Open Babel 单独装后面格式转换全靠它# Ubuntu 18.04 的 openbabel 包会提供 obabel 命令 sudo apt-get install -y openbabel obabel -Vobabel -V能打印版本就说明命令可用。真正跑批时用的是obabel -isd testset.sdf -omol2 -O testset.mol2这种写法-i指定输入格式-o指定输出格式-O是大写字母后面跟输出文件名。小写-o在 Open Babel 里是格式参数不要写混。2.2 创建 /home/autodock 并解压 Vina 与 MGLTools目录我固定用/home/autodock因为后面的vina.sh、conf.txt、mols都按这个根目录写相对路径。换目录不是不行但脚本里的export PATH和cd都要跟着改初装阶段没必要给自己加变量。# 建统一工作目录并把属主改成当前用户 sudo mkdir -p /home/autodock sudo chown -R $USER:$USER /home/autodock cd /home/autodock # 解压 Vina 二进制包 tar -zxvf autodock_vina_1_1_2_linux_x86.tgz # 解压 MGLTools 安装包文件名按实际下载的来 tar -zxvf mgltools_x86_64Linux2_1.5.6.tar_.gztar的参数顺序我写成-zxvf而不是输入里那种-xvfz。z表示 gzipx解压v显示过程f指定归档文件f后面要紧跟文件名顺序写反时容易把z当成文件名报“无法打开”之类的错。解压后目录里应该能看到autodock_vina_1_1_2_linux_x86和MGLTools-1.5.6两个目录先ls确认再往下走。2.3 安装 MGLTools 并验证三条 PATHMGLTools 的安装脚本不是系统级安装它只是在当前目录里生成可执行文件和包结构所以不要用sudo python install.py否则后面普通用户跑脚本会碰到权限问题。cd /home/autodock/MGLTools-1.5.6 # 必须先确认是 Python 2.7如果输出 Python 3.x改用 python2.7 python --version python2.7 install.py提示Ubuntu 18.04 的python默认是 2.7但有些镜像改过update-alternatives装 MGLTools 前先用python --version确认。安装完成后把三条路径写进环境变量。第一条是 Vina 的bin第二条是 MGLTools 的bin第三条是AutoDockTools/Utilities24prepare_receptor4.py和prepare_ligand4.py都在这里。很多人只加了前两条结果一跑批就报prepare_ligand4.py: command not found。# 三条 PATH 缺一不可后面写进 vina.sh 和 sbatch 脚本 export PATH/home/autodock/autodock_vina_1_1_2_linux_x86/bin:$PATH export PATH/home/autodock/mgltools_x86_64Linux2_1.5.6/bin:$PATH export PATH/home/autodock/mgltools_x86_64Linux2_1.5.6/MGLToolsPckgs/AutoDockTools/Utilities24:$PATH # 能看到用法输出说明 Utilities24 已经进 PATH prepare_receptor4.py -h | headprepare_receptor4.py -h能打印用法就够了。这里不要急着把 MGLTools 改成 Python 3 版本1.5.6 的脚本里大量print语句和旧式Tkinter导入硬改会引入一堆无关问题。Python 2.7 在这个场景里是既定前提不是可选项。3. 改 vina.sh 做批量对接受体预处理、配体循环与 conf.txt 参数3.1 受体只处理一次prepare_receptor4.py 的 -r、-e、-o受体文件pro.pdb只预处理一次生成receptor.pdbqt。这一步不要在配体循环里反复做否则每个小分子都重新跑一遍受体时间全浪费在重复工作上。cd /home/autodock # -r 输入受体 PDB-o 输出 pdbqt-e 按输入脚本保留用于让预处理问题尽早暴露 prepare_receptor4.py -r pro.pdb -e -o receptor.pdbqt # SDF 转 MOL2供后面按分子拆分 obabel -isd testset.sdf -omol2 -O testset.mol2-r指定受体文件-o指定输出文件-e是输入脚本里保留的参数作用是让预处理阶段的问题更早暴露不同 MGLTools 小版本对它的解释略有差异跑前用prepare_receptor4.py -h看一眼本机支持项。obabel这一行把多分子的 SDF 转成 MOL2-isd表示输入格式是 SDF-omol2表示输出格式是 MOL2-O后面跟输出文件名。转换完先ls -lh testset.mol2确认文件不是 0 字节。3.2 配体批量循环obabel -m 拆分子prepare_ligand4.py 逐个转 pdbqt批量对接的核心在这个循环里先把testset.mol2按分子拆成vs1.mol2、vs2.mol2这样的文件再对每个 MOL2 调prepare_ligand4.py最后用vina跑单个配体。输入脚本里的--cpu 1是故意的不是浪费核Slurm 给一个任务分配一个核时Vina 再开多线程会超配反而拖慢整批。cd /home/autodock rm -rf mols mkdir mols cd mols # -m 表示按分子拆分生成 vs1.mol2、vs2.mol2... obabel ../testset.mol2 -O vs.mol2 -m for mol2 in $(ls *.mol2); do prepare_ligand4.py -l $mol2 -o ligand.pdbqt vina --config ../conf.txt --cpu 1 --out out.pdbqt --log log.txt obabel -ipdbqt out.pdbqt -osd -O temp.sdf cat temp.sdf output.sdf rm -f log.txt ligand.pdbqt out.pdbqt temp.sdf doneobabel -m会把输入拆成多个文件文件名前缀由-O vs.mol2决定实际生成vs1.mol2、vs2.mol2等。循环里prepare_ligand4.py -l输入单个 MOL2-o输出ligand.pdbqtvina --config读配置--cpu 1控制每个进程只用一核--out输出对接构象--log留日志obabel -ipdbqt把结果转成 SDFcat output.sdf追加到总结果最后删掉中间文件避免mols目录越跑越乱。如果希望某个配体失败就停可以在循环前加set -e批量作业里我一般让它继续跑最后看output.sdf的MODEL数量。参数含义这里怎么选--config ../conf.txt对接配置文件从mols目录往上一级找--cpu 1每个 Vina 进程用 1 核配合 Slurm 单任务单核避免超配--out out.pdbqt单个配体的对接结果每个配体单独生成转 SDF 后删除--log log.txt运行日志失败时先看这个文件如果你拿到的资料包就是按/home/autodock组织的直接把vina.sh、conf.txt和testset.sdf放进去路径不用改换了自己的受体只改pro.pdb和conf.txt的盒子中心。3.3 conf.txt 的字段与相对路径vina 在 mols 里找谁conf.txt不是随便写几个键值就行receptor和ligand的路径是相对当前工作目录解析的。脚本里先cd mols再执行vina --config ../conf.txt所以配置文件里的ligand ligand.pdbqt指的是mols/ligand.pdbqt而receptor ../receptor.pdbqt指的是/home/autodock/receptor.pdbqt。这个相对关系一错Vina 就会报找不到文件。# conf.txt字段名固定坐标和盒子大小按你的受体体系改 receptor ../receptor.pdbqt ligand ligand.pdbqt center_x 0.0 center_y 0.0 center_z 0.0 size_x 20 size_y 20 size_z 20 exhaustiveness 8 num_modes 9 energy_range 3center_x、center_y、center_z是对接盒中心必须按你的受体口袋坐标填不能照抄 0.0size_x、size_y、size_z是盒子边长20 埃只是示例口袋大就加口袋小就减。exhaustiveness控制搜索强度8 是常见起点加到 16 或 32 会更慢num_modes是最多输出几个构象energy_range是能量窗口。为了避免 cd本文还有配套的精品资源点击获取