2. Vina 安装与编译:源码编译、二进制安装、Docker 部署、路径配置

做分子对接,第一件事就是把 Vina 装好。这事说简单也简单——官网下一个二进制文件就能跑;说复杂也复杂——碰到特定系统、CUDA 加速、批量任务,你还是得从源码自己编译。我当年从零折腾 Vina 的时候,光是环境变量就配错了好几轮,嗯,今天咱们把这几种安装方式一次讲透。

核心观点:选哪种安装方式,取决于你的使用场景。单机偶尔跑几个分子 → 二进制安装最快;集群或需要 GPU 加速 → 源码编译;想彻底隔离环境 → Docker 部署。

2.1 二进制安装:最省事的办法

如果你只是想快速验证安装,或者跑个小数据集,直接从官方 Releases 页下载编译好的可执行文件就行。

步骤:

  1. 找到与你系统匹配的二进制包(Linux x86_64、macOS、Windows)。
  2. 解压到 /usr/local/bin 或任意 PATH 目录。
  3. 加执行权限:chmod +x vina
  4. 运行 vina --version 验证。
我的习惯: 解压后先 ldd vina 看依赖库是否完整。有一次我在 CentOS 6 上跑,缺了 OpenSSL 1.1,折腾半天才反应过来。

二进制安装的缺点也很明显:没法自定义编译选项(比如开启多线程、调整评分函数参数),也不能针对你的 CPU 指令集做优化。说白了就是一个黑盒子,能用但不好调。

2.2 源码编译:掌控一切

我个人强烈建议,凡是正式项目都用源码编译。你想想看,对接结果差 0.1 kcal/mol 可能就影响化合物筛选的排序,而编译器选项带来的浮点精度差异,有时候真能带来这种差别。

前置条件:

  • CMake ≥ 3.10
  • C++ 编译器支持 C++14(GCC 7+、Clang 6+)
  • (可选) Boost 库(Vina 1.2.x 之后已不再强制依赖)
  • (可选) OpenMP 支持(用于并行评分)

编译步骤(以 Linux 为例):

git clone https://github.com/ccsb-scripps/AutoDock-Vina.git
cd AutoDock-Vina
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install

这里有几个坑,我踩过记得很清楚:

我曾经遇到: 编译时忘记加 -DCMAKE_BUILD_TYPE=Release,结果 debug 模式跑起来慢 3 倍,还以为是程序 bug。另外,多线程编译 -j$(nproc) 在内存小的机器上会爆,建议设成 -j4 或更少。

编译完成后,可执行文件在 build/bin/ 下。你可以直接复制到系统路径,或者用 sudo make install 自动安装到 /usr/local/bin。

高级编译选项:

CMake 选项说明我推荐的值
-DENABLE_OPENMP=ON启用 OpenMP 并行评分ON(多核机器必开)
-DCMAKE_INSTALL_PREFIX安装路径自定义目录,如 /opt/vina
-DBUILD_TESTING=ON编译测试用例建议 ON,编译完跑一遍单元测试
-DCMAKE_CXX_FLAGS="-march=native"针对当前 CPU 指令集优化能提 5%~10% 速度,但可移植性降低
经验之谈: 如果你用的是 Intel CPU,加上 -march=native -mtune=native,Vina 的评分计算能快不少。但注意,生成的二进制不能在旧 CPU 上跑。

编译完了怎么验证?跑一下内置测试:

cd build
ctest -V

所有测试通过,说明环境没问题,放心用。

2.3 Docker 部署:再也不用担心环境依赖

做计算化学最烦的就是换一台机器环境就崩了。我记得有一次在超算上装 Vina,管理员不给装依赖库,搞了三天才跑起来。后来我学乖了,直接打 Docker 镜像,丢哪都能跑。

Dockerfile 示例:

FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    cmake g++ git wget \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /opt
RUN git clone https://github.com/ccsb-scripps/AutoDock-Vina.git \
    && cd AutoDock-Vina \
    && mkdir build && cd build \
    && cmake .. -DCMAKE_BUILD_TYPE=Release \
    && make -j$(nproc) \
    && make install

ENTRYPOINT ["vina"]

这样打完镜像,你可以在任何有 Docker 的机器上执行:

docker build -t vina:latest .
docker run --rm -v $(pwd)/data:/data vina:latest \
    --receptor /data/1iep.pdbqt \
    --ligand /data/ligand.pdbqt \
    --out /data/output.pdbqt
注意:Docker 容器内文件系统是隔离的,一定要用 -v 挂载卷。我曾经犯过傻,把受体和配体拷进容器里,结果容器一删全丢了。

Docker 部署的另一个好处是方便批量调度——配合 SLURM 或 Kubernetes,你可以同时起几十个容器并行跑不同配体,互不干扰。

2.4 路径配置:让系统找到 vina

装好之后,最基础也是最容易忽略的一步:把 Vina 的路径加到环境变量里。不然每次都要打全路径,批量脚本写起来也很累。

推荐的三种方式:

  • 方式一(用户级): 编辑 ~/.bashrc,添加:
    export PATH=$PATH:/usr/local/bin
    然后 source ~/.bashrc
  • 方式二(系统级): 将可执行文件放入 /usr/local/bin 或 /usr/bin,这些目录通常已在 PATH 中。
  • 方式三(模块化,适合集群): 用 Environment Modules 工具定义模块文件,我一般在 /etc/modulefiles/vina/ 下放一个:
    #%Module1.0
    set version 1.2.5
    prepend-path PATH /opt/vina/${version}/bin
    prepend-path LD_LIBRARY_PATH /opt/vina/${version}/lib
    用 module load vina 切换版本,干净利落。
我的习惯: 我会在 ~/.bashrc 里加一行别名 alias vina='vina --log /tmp/vina.log',这样每次跑自动留日志,方便排查。

2.5 知识框架图:安装方式对比

下面这张图梳理了三种安装方式的关系,以及你该如何根据场景选择。

AutoDock Vina 安装方式决策图 开始安装 Vina 场景? 二进制安装 最快,快速验证 源码编译 自定义优化,生产级 Docker 部署 环境隔离,可迁移 下载解压 + chmod 无额外依赖 加到 PATH CMake + Make 可选 -march=native make install 写 Dockerfile 挂载数据卷 docker run 执行 路径配置 / 环境变量 PATH / LD_LIBRARY_PATH / Module
怎么看这张图: 从顶部「开始安装 Vina」出发,根据你的场景向左、中、右三路走。每一条路最终都汇入路径配置——所以不管你选哪种安装方式,最后一步都是配好环境变量,让系统能找到 vina 命令。

2.6 总结与避坑清单

安装这事,看起来简单,但环境搭不好后面全白干。我把常见的坑列一下,你装的时候可以对照着检查。

问题症状解决方案
依赖库缺失./vina: error while loading shared librariesapt install libssl-dev libc++-dev 或 ldd vina 查漏
权限不足Permission deniedchmod +x vina 或 sudo 安装
OpenMP 未启用单线程跑,多核闲置编译时加 -DENABLE_OPENMP=ON
Docker 容器无输出跑完后找不到结果文件检查挂载卷路径是否写对了
版本不兼容Vina 1.1.x 的配置文件在 1.2.x 上报错统一使用最新稳定版(当前 1.2.5)
一句话:先二进制快速验证,再源码编译定制,最后 Docker 打包上线。路径配置别忘,环境变量搞定后就一劳永逸了。