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 没出过这种问题。
安装完 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+ | 部分库不支持 | 不推荐 |
按这个顺序能避免版本冲突。
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 → 环境创建 → 依赖安装」的路径。看一眼就清楚全局。
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 环境的全套流程。每个步骤都是亲手踩过坑后沉淀下来的。照着走,你不会遇到太大的问题。