4. 安装Miniconda与Python环境:手把手搭建独立conda环境

好,到了动手搭建环境的时候了。AlphaFold 的依赖管理是个大活儿,Python 版本、CUDA 驱动、各种底层库,稍有冲突就跑不起来。我个人习惯用 Miniconda 来隔离一切。为什么不用 Anaconda?它太臃肿了,装一堆我们用不到的包。Miniconda 轻量,只带 conda 和 Python,剩下的你自己加。

你想想看,要是直接在系统 Python 里装 AlphaFold 的依赖,版本冲突会让你崩溃的。conda 的环境隔离说白了就是「给每个项目一个独立的小房间」——这里面用的 Python 版本、numpy、tensorflow 都是自己的,互不干扰。

4.1 为什么选择 Miniconda

不是所有包管理器都能处理 AlphaFold 这种混合了 Python + C++ + CUDA 的复杂项目。conda 能。

  • 跨语言依赖管理:pip 只管 Python 包,conda 还能管 C 库、CUDA 工具包、系统库。AlphaFold 需要 HMMER、HH-suite 等 C 程序,conda 可以直接装。
  • 环境隔离彻底:每个环境有自己的 lib/ 和 bin/,不会和系统冲突。
  • 比 virtualenv 稳定:我在项目中遇到过 virtualenv 在 CUDA 环境切换时炸掉的情况,conda 没出过这种问题。
我的建议:不要用 Anaconda Navigator 那个 GUI 界面。命令行更快、更可控。
安装完 Miniconda 后,连 GUI 都别装。

4.2 安装 Miniconda(Linux 环境)

我们的 AlphaFold 部署目标是 Linux 服务器(一般是 Ubuntu 20.04 或 22.04)。如果你本机是 macOS 或 Windows,安装步骤类似,但 .sh 脚本换成对应平台的。

以下是标准流程:

# 1. 下载最新 Miniconda 安装脚本(Linux x86_64)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 2. 运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh

# 3. 按照提示操作:
#    - 按 Enter 阅读许可协议
#    - 输入 yes 接受协议
#    - 确认安装路径(默认 ~/miniconda3)
#    - 最后问是否初始化 conda,输入 yes

安装完成后,关闭当前终端再重新打开,或者执行 source ~/.bashrc 让 conda 命令生效。跑一下 conda --version 检查:

conda --version
# 输出类似:conda 24.9.2
重要:如果 conda --version 报错 command not found,检查 ~/.bashrc 末尾是否有 conda 初始化代码。
没有的话手动加一行:export PATH="$HOME/miniconda3/bin:$PATH"

4.3 创建独立的 AlphaFold 环境

conda 装好了,下一步是创建专属环境。AlphaFold 官方推荐用 Python 3.10 或 3.11。我实测下来,Python 3.10 在包兼容性上最稳妥。

# 创建环境,命名为 alphafold,指定 Python 3.10
conda create -n alphafold python=3.10

# 激活环境
conda activate alphafold

激活后,你的终端提示符会变成 (alphafold) user@server:~$。这样你就进入了一个干净的环境,里面只有 Python 3.10 和最基本的 pip/setuptools。

检查一下 Python 版本:

python --version
# 输出:Python 3.10.x

4.4 配置国内镜像源(加速下载)

默认的 conda 源在国外,下载很慢。我个人习惯配置清华源或阿里源。如果你们公司有内部镜像,直接换公司源更快。

# 添加 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/

# 设置搜索时显示通道地址
conda config --set show_channel_urls yes

同样,pip 也要配国内源:

# 配置 pip 镜像源(临时使用)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple somepackage

# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

4.5 推荐 Python 版本与依赖管理策略

说到这里,我想强调一个我在项目中遇到过的大坑:不要追求最新的 Python 版本。AlphaFold 依赖的 JAX、TensorFlow 对新版 Python 的支持常常滞后。Python 3.12 在 2024 年发布时,很多关键库还不兼容。

Python 版本 AlphaFold 兼容性 推荐用途
3.9 完全兼容 备选方案,但部分新包不支持
3.10 最稳定,官方推荐 首选
3.11 兼容,但需检查具体版本 可以尝试,配合最新版 AlphaFold
3.12+ 部分库不支持 不推荐
依赖管理黄金法则:先确定 Python 版本,再安装底层库(如 JAX、TensorFlow),最后装上层应用(如 AlphaFold)。
按这个顺序能避免版本冲突。

4.6 用 environment.yaml 精确锁定依赖

手动一个包一个包安装太容易出错了。我推荐用 environment.yaml 文件来管理整个环境的依赖。这个文件像一个「配方」,包含了环境名、Python 版本、所有包的名称和版本号。

下面是一个为 AlphaFold 准备的示例 environment.yaml:

name: alphafold
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.10
  - pip
  - cudatoolkit=11.8
  - cudnn=8.6
  - openmm=8.0
  - pdbfixer
  - pip:
    - jax==0.4.34
    - jaxlib==0.4.34
    - tensorflow==2.13.0
    - biopython==1.83
    - dm-haiku==0.0.11
    - ml-collections==0.1.0
    - absl-py==1.4.0

用这个文件创建环境,一键搞定:

conda env create -f environment.yaml

为什么会推荐这种方式?三个理由:

  • 可复现:分享给同事或在另一台服务器部署,跑同一份 yaml 就是一模一样的环境。
  • 版本锁定:每个包的版本都写死了,不会因为某人改了一个包导致整个管线崩掉。
  • 方便更新:只需要改一行版本号,重新运行 conda env update 就行。

我曾经因为环境问题浪费过一整天——明明代码一样,结果在同事机器上跑不通。后来发现是 pip 自动升级了某个依赖。从那以后,每个项目我都有 environment.yaml 锁死版本。

4.7 环境管理与日常操作

以下是几个你一定会用到的 conda 命令:

# 查看所有环境
conda env list

# 激活环境
conda activate alphafold

# 退出当前环境
conda deactivate

# 安装包(在激活的环境里)
conda install numpy=1.24.3

# 使用 pip 安装 conda 里没有的包
pip install dm-haiku

# 导出当前环境的精确依赖(包含版本号)
conda env export > environment_exact.yaml

# 删除整个环境
conda env remove -n alphafold
小技巧:conda env export 导出的 yaml 会包含 conda 构建版本号(如 numpy=1.24.3=py310h*),文件会特别大。
我一般先 conda env export --from-history,只导出你「主动安装」的包,干净很多。

4.8 完整的安装流程图

下面这张流程图画了整个「Miniconda → 环境创建 → 依赖安装」的路径。看一眼就清楚全局。

Miniconda 环境搭建核心流程 安装 Miniconda 下载 .sh → bash安装 → source 创建 Conda 环境 conda create -n alphafold python=3.10 配置镜像源 国内源 / 公司内源 安装 Conda 依赖 cudatoolkit, cudnn, openmm conda install -c conda-forge 包名 安装 Pip 依赖 jax, tensorflow, haiku pip install 包名=版本号 一键自动化:conda env create -f environment.yaml 锁定所有版本,可复现,可分享 无论选哪种方式,最终目标是获得一个「干净、可复现」的独立环境

4.9 验证环境是否完整

环境搭完了,跑一个简单测试验证所有包都能正常导入:

# 写一个测试脚本
cat > test_env.py << 'EOF'
import sys
print(f"Python 版本: {sys.version}")

# 测试核心依赖
import jax
print(f"JAX 版本: {jax.__version__}")
print(f"JAX 设备: {jax.devices()}")

import tensorflow as tf
print(f"TensorFlow 版本: {tf.__version__}")

import openmm
print(f"OpenMM 版本: {openmm.version.short_version}")

import numpy as np
print(f"NumPy 版本: {np.__version__}")

print("\n所有依赖加载成功!")
EOF

# 运行测试
python test_env.py

如果看到每一行都打印出版本号,没有 ImportError,那么恭喜你——环境搭建完毕。

常见错误:如果你看到 ImportError: libcudart.so.11.0: cannot open shared object file,说明 CUDA 工具链没装对。
回头检查 cudatoolkit 版本是否匹配你的 NVIDIA 驱动。用 nvidia-smi 查看驱动支持的 CUDA 版本。

嗯,以上就是我搭建 AlphaFold 环境的全套流程。每个步骤都是亲手踩过坑后沉淀下来的。照着走,你不会遇到太大的问题。