2. Vina 安装与编译:源码编译、二进制安装、Docker 部署、路径配置
做分子对接,第一件事就是把 Vina 装好。这事说简单也简单——官网下一个二进制文件就能跑;说复杂也复杂——碰到特定系统、CUDA 加速、批量任务,你还是得从源码自己编译。我当年从零折腾 Vina 的时候,光是环境变量就配错了好几轮,嗯,今天咱们把这几种安装方式一次讲透。
2.1 二进制安装:最省事的办法
如果你只是想快速验证安装,或者跑个小数据集,直接从官方 Releases 页下载编译好的可执行文件就行。
步骤:
- 找到与你系统匹配的二进制包(Linux x86_64、macOS、Windows)。
- 解压到
/usr/local/bin或任意 PATH 目录。 - 加执行权限:
chmod +x vina - 运行
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% 速度,但可移植性降低 |
-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
-v 挂载卷。我曾经犯过傻,把受体和配体拷进容器里,结果容器一删全丢了。
Docker 部署的另一个好处是方便批量调度——配合 SLURM 或 Kubernetes,你可以同时起几十个容器并行跑不同配体,互不干扰。
2.4 路径配置:让系统找到 vina
装好之后,最基础也是最容易忽略的一步:把 Vina 的路径加到环境变量里。不然每次都要打全路径,批量脚本写起来也很累。
推荐的三种方式:
- 方式一(用户级): 编辑
~/.bashrc,添加:
然后export PATH=$PATH:/usr/local/binsource ~/.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}/libmodule load vina切换版本,干净利落。
~/.bashrc 里加一行别名 alias vina='vina --log /tmp/vina.log',这样每次跑自动留日志,方便排查。
2.5 知识框架图:安装方式对比
下面这张图梳理了三种安装方式的关系,以及你该如何根据场景选择。
vina 命令。
2.6 总结与避坑清单
安装这事,看起来简单,但环境搭不好后面全白干。我把常见的坑列一下,你装的时候可以对照着检查。
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 依赖库缺失 | ./vina: error while loading shared libraries | apt install libssl-dev libc++-dev 或 ldd vina 查漏 |
| 权限不足 | Permission denied | chmod +x vina 或 sudo 安装 |
| OpenMP 未启用 | 单线程跑,多核闲置 | 编译时加 -DENABLE_OPENMP=ON |
| Docker 容器无输出 | 跑完后找不到结果文件 | 检查挂载卷路径是否写对了 |
| 版本不兼容 | Vina 1.1.x 的配置文件在 1.2.x 上报错 | 统一使用最新稳定版(当前 1.2.5) |