☰
Linux下AutoDockTools、AutoGrid与AutoDock安装及分子对接全流程实战
2026/10/5 3:10:07 网站建设 项目流程

做分子模拟、药物设计的朋友,大概率都听过AutoDockTools、AutoGrid和AutoDock这套组合。我第一次在Linux下折腾这套工具的时候,遇到的第一个坑,就是不知道AutoDockTools并不是一个独立的软件,而是随MGLTools一起分发的图形界面;AutoGrid和AutoDock又是另外两个独立的命令行程序。三个程序装法不同、依赖不同,网上很多教程混在一起讲,结果照着抄也容易出错。这篇文章把安装和第一次分子对接的全流程完整走一遍,适合刚接触分子对接、想在Linux上把工具链跑通的人,也适合装过但总被各种报错卡住的同学。我会从环境准备讲起,一直讲到最后怎么看对接结果,中间还会穿插一些踩坑记录,保证你能少走弯路。

1. 在动手之前:理清AutoDock工具链的分工与环境选型

1.1 AutoDockTools、AutoGrid、AutoDock到底各干什么

很多初学者容易把这三个名字混在一起,其实它们的角色非常清楚。AutoDock是真正的对接计算引擎,所有构象搜索和打分都在这个命令行程序里完成;AutoGrid是配合AutoDock工作的预计算工具,它需要在整个研究空间里提前算好各种原子类型的格点能量文件,这样AutoDock在搜索构象时就可以直接查表,不用每试一个位置就重新算一遍能量。AutoDockTools(ADT)则更偏“前台”,它基于MGLTools开发,主要提供图形界面,帮我们完成受体加氢、计算电荷、生成pdbqt文件、设置格点盒子和对接参数、分析对接结果这些繁琐的准备工作。

打个比方,AutoDockTools相当于实验台,AutoGrid相当于提前配好的溶剂和缓冲液,AutoDock才是那个真正进行反应的反应釜。三者配合起来才能跑通一次分子对接。安装顺序上也建议先装AutoDockTools(因为之后设置dpf、gpf都靠它),再装AutoGrid和AutoDock的独立二进制文件。

1.2 发行版与软件版本怎么选

这套软件的历史比较久,所以选Linux发行版时别太追求激进,稳定才是最关键的。个人建议Ubuntu 18.04、20.04、22.04,或者CentOS 7、8这类长期支持版本都行,Debian系和RedHat系的配置方法我下面都会写。不建议在纯滚动更新的发行版上折腾,因为图形库的版本变化容易让ADT的Tk界面出现各种兼容问题。

版本选择上,我推荐MGLTools 1.5.7配合AutoDock 4.2.6,这是最经典的组合,教程多、资料全、坑也都被前人踩得差不多了。虽然现在有AutoDock Vina,性能更好,但AutoDock 4作为教学和科研经典仍然大量被使用,而且这篇题目既然点名要装AutoGrid和AutoDock,那就围绕经典流程来讲。NCBI上的PDB文件、后续分析工具PyMOL,和这套版本兼容性都非常好,没有必要为了求新而去用测试版本。

1.3 安装基础依赖

在开始装MGLTools之前,建议先把基础依赖装好,否则后面ADT界面可能起不来,或者跑AutoGrid时突然报一个找不到共享库的错误。Ubuntu/Debian系可以用下面的命令:

sudo apt update sudo apt install -y build-essential csh tk libxt6 libxtst6 libxext6 libxi6 libglu1-mesa libstdc++6

CentOS/RHEL系对应的是:

sudo yum install -y gcc gcc-c++ tcl tk libXt libXtst libXext libXi mesa-libGLU libstdc++

这里有一个很容易被忽略的地方:ADT依赖的是32位还是64位的图形库,取决于你下载的MGLTools包是哪个架构。不过一般来说,直接装64位系统默认的图形库就够了。如果后面启动ADT时提示缺少libXmu、libXinerama,再针对性安装两个包就行,不要一次装一堆用不到的库,避免污染系统环境。

还有一点,系统本身有没有Python、Python是什么版本,其实不重要。因为MGLTools自带了一套完整Python 2.7运行时,它并不走系统的Python。这点很多人不知道,导致在网上查了一堆“Python版本冲突”的解决方案,纯属浪费时间。

2. 安装AutoDockTools:千万别跳过的MGLTools全家桶

2.1 下载MGLTools安装包

很多人找AutoDockTools的安装包时找半天,因为直接搜“AutoDockTools下载”往往跳到一个需要填写邮箱的页面,看着挺麻烦。实际上我们需要的是MGLTools安装包,它包含了ADT。官方地址在Scripps研究所的CCSB页面,项目名称就是MGLTools,对应文件一般是mgltools_x86_64_Linux_1.5.7.tar.gz。

下载时注意两点:一是确认自己的系统是x86_64还是ARM架构,ARM架构的需要找对应包,不过官方对ARM支持一般,建议直接用x86_64的机器;二是不要图省事去第三方博客下载未知来源的包,一是可能缺文件,二是可能有安全风险。官方包解压后自带install.sh,但我个人更推荐用解压后配置环境变量的方式,因为install.sh会往系统目录写文件,后续卸载反而麻烦。

如果要通过命令行下载,可以这样:

wget https://ccsb.scripps.edu/projects/mgltools/

不过官网不会直接给你一个静态链接,通常还是要手动点击下载。所以我一般是直接在浏览器里下载到本地,再用scp或者U盘传到Linux机器上。传完后用MD5校验一下,避免传输出错。命令是:

md5sum mgltools_x86_64_Linux_1.5.7.tar.gz

在官网上核对一下MD5值,别嫌这一步多余。我有一次就是传了一半中断,解压时总报错,折腾了一个多小时才反应过来是文件不完整。

2.2 解压、配置环境变量并启动

把包解压到/opt目录,这是Linux上的惯例位置,普通用户有root权限就能操作:

sudo mkdir -p /opt sudo tar -zxvf mgltools_x86_64_Linux_1.5.7.tar.gz -C /opt

解压后会看到/opt/mgltools_x86_64_Linux_1.5.7这个目录。网上的教程一般会让你直接运行./install.sh,但这个脚本本质上是把路径写到一些配置里,咱完全可以手动管理。需要修改~/.bashrc,把下面这段加进去:

export MGL_ROOT=/opt/mgltools_x86_64_Linux_1.5.7 export PATH=$MGL_ROOT/bin:$PATH export PYTHONPATH=$MGL_ROOT/lib/python2.7/site-packages:$PYTHONPATH export LD_LIBRARY_PATH=$MGL_ROOT/lib:$LD_LIBRARY_PATH

然后执行source ~/.bashrc让变量生效。这里有一个细节,ADT本身是一个Python脚本,通过pythonsh来运行,所以关键是PYTHONPATH和LD_LIBRARY_PATH都要指向MGLTools自己的目录。如果你之前装过Anaconda,~/.bashrc里已经有Anaconda的PYTHONPATH或者PATH设置了,建议把这些MGLTools相关的行放在文件末尾,确保它们存在,但不强制覆盖Anaconda的路径,因为ADT启动时用的解释器是$MGL_ROOT/bin/pythonsh,不是系统的python命令。

启动ADT的方式有两种。一种是在终端里直接输入:

adt

或者在装有桌面环境的系统里找到安装目录下的快捷方式。如果一切正常,会弹出AutoDockTools的图形界面,包含菜单栏和多个工具面板。如果你是在纯命令行的服务器上操作,没有显示环境,那ADT的图形界面是起不来的,这种情况下可以用X11转发,或者干脆就跳过后面的图形准备步骤,改用脚本方式准备受体和配体。后一条路线更麻烦,所以建议本地安装时配一个带桌面的Linux,或者在虚拟机里装好再操作。

2.3 验证Python运行时是否可用

装完先别急着打开ADT,先验证MGLTools自带的Python能不能正常工作。终端执行:

$MGL_ROOT/bin/pythonsh -c "import sys; print(sys.version)"

如果能输出2.7.x的版本号,说明基本环境没问题。再验证一下ADT的依赖能不能找到:

$MGL_ROOT/bin/pythonsh -c "from AutoDockTools.autodockTools import *; print('ADT OK')"

这一步如果在import时报错,多半是PYTHONPATH没配对,或者某些动态库缺失。常见的是报libtk8.5或libtcl8.5找不到,这时候检查$MGL_ROOT/lib目录下是否有对应的.so文件,如果有,就确认LD_LIBRARY_PATH是否真的包含了这个目录。我通常还会顺手装一个tk和tcl的系统包,双保险。

3. 安装AutoGrid与AutoDock主程序:命令行才是核心

3.1 下载并放置二进制文件

AutoDock和AutoGrid的下载地址在Scripps实验室的AutoDock官网。需要下载的是autodock4.2.6_x86_64linux.real和autogrid4.2.6_x86_64linux.real两个文件。注意它们不是安装包,是预编译好的可执行文件,文件名里带着.real,解压后没有目录结构,就两个孤立文件。

我习惯把它们放到/usr/local/bin下,方便所有用户使用:

sudo mv autodock4.2.6_x86_64linux.real /usr/local/bin/autodock4 sudo mv autogrid4.2.6_x86_64linux.real /usr/local/bin/autogrid sudo chmod +x /usr/local/bin/autodock4 /usr/local/bin/autogrid

先说说为什么不直接复制成autodock这个名字,要加个4。因为AutoDock Vina的可执行文件通常叫vina,不会冲突;但如果你以后要装AutoDock 4和AutoDock 5的实验版,避免混淆的最好办法就是保留版本号。同理,autogrid4也带着版本号,以后单独写脚本时一眼就能看出来用的是哪个程序。

这两个文件都是32位还是64位?前面下载时选的x86_64就是64位版本。如果你的机器是64位,一般没问题。但有些老教程下载的是.linux开头的32位版本,运行时会提示cannot execute binary file: Exec format error,这时候不要怀疑机器坏了,是你下载了错误的架构。

3.2 配置环境变量与动态库依赖

这两个程序本身不依赖太多东西,但对libstdc++有一定要求。运行下面命令试试:

autodock4

如果看到一大段参数说明和帮助信息,说明程序能正常执行。如果报错:

autodock4: error while loading shared libraries: libstdc++.so.6: cannot open shared object file

说明系统缺少对应版本的libstdc++。Ubuntu下执行:

sudo apt install libstdc++6

CentOS下则是:

sudo yum install libstdc++

还有一种情况是其实库存在,但程序在运行某些功能时需要32位库,尤其当系统是64位但AutoDock是32位版本时。这里顺便说一下,如果确实需要32位兼容库,Ubuntu下用sudo dpkg --add-architecture i386 && sudo apt update,再装libstdc++6:i386。但我还是建议直接重新下载64位版本,省心不是一点半点。

CentOS用户如果遇到libstdc++.so.6(GLIBCXX_3.4.21)(64bit)is needed 之类的问题,多半是系统自带的库版本太老,可以安装Software Collections里的devtoolset来升级编译链。不过纯做对接计算的话,我自己更推荐Ubuntu系列,依赖问题少很多。

3.3 用命令验证安装

验证AutoDock和AutoGrid的最好方式,是找一个现成的dpf、gpf文件跑一遍。网上可以下载到AutoDock自带的示例文件,包含1dni等测试体系。简单验证方法是:

autogrid -p 1dni.gpf -l 1dni.glg autodock4 -p 1dni.dpf -l 1dni.dlg

-p指定参数文件,-l指定日志输出文件。如果运行结束没有核心错误,产出了.glg和.dlg文件,说明AutoGrid和AutoDock都正常。这个测试我建议每个人都做一遍,因为它可以把程序自身的问题和你操作中的问题分开。程序都没跑通就去准备自己的蛋白,出了问题根本分不清是哪个环节的锅。

4. 实现一次完整的分子对接:从PDB文件到结果输出

4.1 受体和配体文件的准备

这一步是整个对接流程中操作密度最高的部分,也是新手最容易懵的地方。核心目标是把原始结构文件变成AutoDock认识的文件格式,也就是pdbqt。pdbqt和普通pdb最大的区别在于,它额外记录了原子的AutoDock Atom Type(比如A为芳香族碳、OA为氢键受体氧、HD为氢键供体氢等),以及配体里哪些键是允许旋转的。

在ADT里操作时,先通过File > Read Molecule打开蛋白质的pdb文件。打开后要看几个东西:蛋白质是否含结晶水,如果有,用Edit > Delete Water删掉;是否含配体,如果只是做对接,通常要把原配体抽出来,另外准备成小分子文件。然后是加氢操作,Edit > Hydrogens > Add,因为PDB解析出来的结构往往没有氢原子,而对接时的氢键识别必须依赖氢的位置。

加完氢还要计算Gasteiger电荷,这步在ADT里是自动的,但如果你用命令行工具,需要手动执行addcharge。最后在Edit > Charges > Compute Gasteiger之后,Edit > Atom Types > Merge Nonpolar Hydrogens会把非极性氢合并到碳原子上,这是AutoDock 4的要求,可以显著减少原子数并提高计算速度。注意,如果你打算做柔性侧链对接,这一步的顺序不能乱,先合并非极性氢再做其他操作,否则以后调整rotamer时会出错。

处理完后,通过File > Save > Write PDBQT保存受体,文件后缀就是.pdbqt。这里给一个常见参数的参考表:

步骤操作说明
去水Edit > Delete Water结晶水通常不参与对接口袋内相互作用
加氢Edit > Hydrogens > Add处理pH默认值,保持极性氢
计算电荷Edit > Charges > Compute Gasteiger必须做,否则对接打分失真
合并非极性氢Edit > Atom Types > Merge Nonpolar Hydrogens减少原子数,AutoDock 4标准操作
保存File > Save > Write PDBQT受体文件名建议全英文、无空格

配体的准备思路类似,只是多了两个关键步骤:检测Root和设置可旋转键。在ADT里,打开小分子后用Ligand > Torsion Tree > Detect Root,然后设置可旋转的键。保存为pdbqt时,ADT会记录每个旋转键的状态。如果你用的是SMILES结构或某个数据库下载的mol2文件,建议先加氢、分配电荷,再检测Root。不同软件生成的mol2文件对原子类型的标注差异很大,如果不是从PDB直接提取的配体,最好用Open Babel对每个原子上相应的AutoDock类型,否则后面的格点计算会报原子类型缺失。

4.2 设置AutoGrid格点文件

AutoGrid需要的是一个格点盒子,也就是你准备让配体在哪些空间范围内活动。这个范围必须覆盖整个对接口袋,但也不要大到让配体跑到离蛋白非常远的位置。在ADT里,操作路径是:

Grid > Macromolecule > Choose,选择受体pdbqt;然后Grid > Set Map Types > Choose Ligand,选择配体pdbqt;最后Grid > Grid Box弹出一个设置面板。

格子大小怎么确定?核心是“包裹有效口袋并留出适当余量”。如果你的体系有已知的结合位点,把格子中心放在口袋中心,格子尺寸设置为能覆盖整个口袋并外扩5~10埃。如果不知道结合位点,可以先放在整个蛋白质中心,格子稍微大一点做盲对接,但计算时间会成倍上涨。网格间距默认0.375埃,这个值是AutoDock 4的默认值,一般不需要改。每个维度格点数最好控制在60×60×60以内,超过这个规模计算开销会明显增加。

格点文件保存时会自动生成.gpf文件,内容里最关键的是gridcenter和npts两个参数。如果你不想用ADT的图形界面,也可以手动编辑gpf文件,大致长这样:

npts 60 60 60 gridfld receptor.maps.fld spacing 0.375 receptor_types A C HD N NA OA SA S ligand_types A C HD NA N OA SA gridcenter 10.5 20.8 30.2

这里的gridfld指定输出格点文件名,receptor_types和ligand_types是从pdbqt里自动提取的原子类型清单,手动写的话很容易漏,建议还是让ADT生成,再按需修改。我自己一般只动gridcenter和npts,其他字段让程序自己管理。

4.3 运行AutoGrid与AutoDock

gpf文件准备好后,就可以运行AutoGrid了。这里有个顺序不能错:先跑AutoGrid,再跑AutoDock。因为AutoDock运行时需要读取AutoGrid生成的格点能量文件,这一步没跑,后面直接报错。

autogrid -p receptor.gpf -l receptor.glg

运行时间通常只有几秒到几十秒。跑完后确认目录下生成了.maps.fld系列文件,包括每个原子类型的.map文件。然后准备dpf文件。dpf是AutoDock的参数文件,可以在ADT里通过Docking > Run > AutoDock 4来设置,也可以手动创建。一个最简单的dpf文件包含这些核心参数:

autodock4参数文件示例 parameter_file AD4_parameters.dat fld receptor.maps.fld map A receptor.A.map map C receptor.C.map map HD receptor.HD.map map N receptor.N.map map NA receptor.NA.map map OA receptor.OA.map move ligand.pdbqt about 0 0 0 tran0 10.5 20.8 30.2 quat0 0 0 0 1 dihe0 0 0 0 torsdof 6 rmstol 2.0 rmsattr 1 0 0 ga_pop_size 150 ga_num_evals 2500000 ga_num_generations 27000 ga_window_size 10 ga_run 20 analysis_command perl analyse_dp4.pl

这些参数里有几个值得说。ga_run 20表示做20次独立搜索,最终会得到20个结果聚类;ga_num_evals是每次搜索的评估次数,2500000是常见中等规模设置,蛋白大、配体柔性键多时可以适当增加到5000000;rmstol 2.0是聚类合并的RMSD阈值,越大聚出的类越少;torsdof会自动从配体pdbqt里读取,手动写容易错误。

dpf里tran0、quat0、dihe0是初始位置和取向参数,一般设置为0或随便给一组初始值即可,因为遗传算法会自己搜索整个盒子空间。设置完成后运行:

autodock4 -p receptor_ligand.dpf -l receptor_ligand.dlg

AutoDock 4是单线程程序,所以20个run会串行跑。如果配体不大、体系不大,几分钟内能完成;如果蛋白有几千个原子、配体柔性键很多,可能要跑一晚上。跑的时候建议把终端挂着,偶尔看一眼进度,窗口没输出不代表卡死,AutoDock本身在计算时是静默状态,只有每个run结束时会输出一行进度。这个“半天没输出”的特点经常被新手误认为是程序挂了,其实它在算。

4.4 结果分析:读懂dlg文件与聚类信息

对接结束后,最主要的结果文件就是.dlg,可以用文本编辑器打开,也可以直接用ADT的Analyze > Dockings > Open来加载。dlg文件很长,重点看最后部分的聚类统计。每一行大致如下:

CLUSTERING HISTOGRAM ______|______ 20 2 -8.23 3.12 15 4 -7.98 1.05

这里的含义是:聚类编号,该聚类中的构象个数,平均结合能(kcal/mol),与最低能量构象的RMSD值。AutoDock会用RMSD把所有构象归类,能量最低的类通常被认为是最可靠的结合模式。如果最大聚类里包含了大量构象且结合能最低,说明这个结合模式的可信度很高;如果最低能构象是孤立点,周围只有很低的重复次数,那就要谨慎了,可能是搜索空间没覆盖好,或者配体没有找到真实的口袋。

打开dlg文件还有一种方式,用PyMOL可视化pdbqt格式的优势就在这时体现出来了。ADT可以把每次run的最低能量构象另存为pdbqt文件,再在PyMOL里叠合受体结构,直观查看配体在口袋里的朝向、氢键、疏水接触。这一步其实和安装关系不大,但用好了能极大提升你对对接结果的判断力。说到这,很多人在AutoDock装好后会再装一个AutoDock Vina做交叉验证,如果没有Vina,就先谨慎多取几个聚类结果对比,这就是另一个话题了。

5. 常见问题速查与避坑心得

5.1 安装和运行阶段的典型问题

结合我自己和周围同学踩过的坑,我把高频问题整理成了一个速查表,方便大家对号入座。

现象可能原因解决方案
adt命令找不到PATH没配检查~/.bashrc中MGL_ROOT路径及source ~/.bashrc
ADT界面打不开,显示Tk相关错误缺少Tk图形库sudo apt install tk libtk8.6或对应tcl包
import ADT时报No module namedPYTHONPATH没指向MGLTools确认$MGL_ROOT/lib/python2.7/site-packages在PYTHONPATH
autodock4报找不到libstdc++系统库版本太低或缺少32位库装新libstdc++,或改用64位版本
AutoGrid运行后无.map文件gpf里受体原子类型与pdbqt不匹配重新打开pdbqt,确认类型后再生gpf
AutoDock跑了一半无响应可能是正常计算中观察CPU占用,别急着Ctrl+C
配体pdbqt里坐标全是0保存前没有读入正确构象先显示原配体坐标,再保存

其中最容易爆的问题是“ADT界面能开,但点Grid设置时总报错”。这多半是受体或配体pdbqt里的原子类型异常。AutoDock 4的原子类型表里只有C、A、N、NA、OA、S、SA、HD等,如果配体里出现了Cl、Br等卤素原子而你没有映射成AutoDock支持的原子类型,对接程序根本跑不动。针对卤素原子,常见的做法是把它在ADT里改为Br或Cl对应的AutoDock原子类型,e.g.Br为非极性卤素时映射成A或C,但这会影响打分精度。更稳妥的是用Open Babel预先转换为AutoDock类型。这一步是很多药物设计体系卡住的元凶。

5.2 对接结果不合理的排查思路

如果AutoDock顺利跑完,但结果明显不对——比如最低能量的构象完全脱离了已知口袋,或者打分奇高,不要急着怀疑软件有问题。按照这个顺序排查:第一,看受体pdbqt是不是完整,有没有缺失残基;第二,看配体pdbqt是不是保持了正确的化学结构,尤其注意原子类型和手性;第三,看一下格点盒子的中心坐标是不是真的覆盖了你想研究的区域,这个问题非常常见,有时候开着ADT手一抖,格点中心停在了一个远离蛋白的位置;第四,检查dpf里torsdof是否和配体的可旋转键数量一致,如果不一致,会导致搜索空间被错误描述。

结合能数值也需要有概念。AutoDock 4给出的结合能一般在-4到-12 kcal/mol之间,-7左右已经算不错,低于-9通常意味着比较强的相互作用。如果你看到一个-20甚至更低的数值,多半是体系准备有问题,比如配体原子和受体原子有严重重叠,或者格点产生了边界极值。另一个需要养成的习惯是看AutoDock日志里的警告信息,比如WARNING: 10% of grid points were occupied by the ligand,中文意思是配体初始位置超出格点范围,虽然不是致命错误,但会影响搜索结果。

5.3 几个能提高效率的小习惯

最后分享几个我实际操作中反复验证过的小习惯。一是把受体、配体、gpf、dpf、结果文件分别建子目录管理,命名规则统一,比如protein/、ligand/、grid/、dock/。对接参数调整时,复制一个dpf改一行参数,不要在原文件上直接改,这样复查起来非常方便。二是写一个简单的批处理脚本,例如TCL脚本或者Shell脚本,用来自动化批量对接多个配体。ADT本身支持脚本化运行,但这个上手难度大,新手先手动跑通单体系,再研究批处理。三是每次跑完一次对接,顺手保存一张格点盒子位置图。因为AutoGrid和AutoDock对格点中心极其敏感,隔几天回头又不记得自己当初到底把盒子放在哪儿了,有图有真相。

还有一点关于系统资源。AutoDock 4是单线程的,如果你有8个核心,不要指望它自动并行。想加快批量对接,可以同时开8个autodock4进程来处理不同配体,每个进程占用一个核心,这样才是真正的多任务并行。我经常看到有人抱怨AutoDock太慢,其实不是软件慢,而是没把机器用满。

我自己的体会是,AutoDock这套工具链确实有点老,界面也不算友好,但它的逻辑其实很清晰:结构准备、格点预计算、构象搜索、结果分析,四步各司其职。只要把每一步的输入和输出关系弄明白,安装过程和对接过程都不会太难。遇到问题先从日志文件里找线索,不要一上来就重装系统或者换软件。踩过几次坑之后,你会发现自己对整个分子对接流程的理解也上了一个台阶。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询