Conda环境管理:安装、镜像源、环境操作

1898 字
9 分钟
Conda环境管理:安装、镜像源、环境操作

Conda 的核心价值是环境隔离——每个项目独立维护一套软件依赖,避免 pip/conda/apt 混装导致的库冲突(如 GLIBCXX_3.4.26 not found)。本文覆盖 Miniconda 安装、镜像源配置、环境创建/克隆/导出/删除的完整流程,每一步在 Debian 12 上实测通过。

1. 宿主环境说明#

Terminal window
$ cat /etc/os-release | head -2
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
$ uname -m
x86_64
$ free -h | head -1
total used free
Mem: 7.7Gi 2.1Gi 5.7Gi

本文所有操作兼容 Ubuntu 20.04/22.04 和 CentOS 7。云服务器 8GB RAM 起步,低于这个跑 conda 装包可能会 OOM。

2. 为什么选 Miniconda 而不是 Anaconda#

Anaconda 是全家桶——装完 3GB+ 磁盘没了,里面 90% 的包你做生信用不到。Miniconda 只有基础 python + conda 核心,体积不到 100MB。

Terminal window
# 清华镜像源下载 Miniconda(比官网快10倍)
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh \
-O /tmp/miniconda.sh
# 静默安装到 /opt/miniconda3(-b=不加环境变量,-p=指定路径)
bash /tmp/miniconda.sh -b -p /opt/miniconda3

输出关键行:

installation finished.

别漏了最后一步初始化:

Terminal window
# 让conda命令在终端可用
/opt/miniconda3/bin/conda init bash
# 重新加载bash配置
source ~/.bashrc
# 验证
conda --version
# 输出:conda 24.x.x

安装路径选 /opt/miniconda3 的好处:这台服务器上所有用户都能用(前提有读和执行权限),不需要每个人自己装一份。

3. 镜像源配置——解决”下载慢、超时、连不上”#

默认从 repo.anaconda.com 拉包,在国内基本没法用。换清华镜像:

Terminal window
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
conda config --set channel_priority flexible

参数说明:

  • show_channel_urls yes:装包时打印来源,方便排查哪个源出了问题
  • channel_priority flexible:按添加顺序搜索,第一个找到的就用。比 strict(严格按顺序拒绝跨源)更适合生信场景——因为生信往往需要 conda-forge + bioconda 混用

实测踩坑: 清华镜像最近加了 Terms of Service 验证,首次用会提示:

To accept these channels' Terms of Service, run:
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

老老实实跑这两条,不然装包会阻塞。如果清华镜像不稳定,替代方案是北外镜像:

Terminal window
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/

4. 环境的完整生命周期#

4.1 创建环境——生信项目常用#

每个项目独立环境,这是建议。好处:项目A用 Python 3.8 + STAR 2.7,项目B用 Python 3.10 + STAR 2.8,各不干扰。

Terminal window
# 创建基础环境(指定python版本,避免conda自己选一个老的)
conda create -n rnaseq_project -y python=3.10
# 一次性创建并安装生信工具
conda create -n rnaseq_project -y \
python=3.10 \
fastqc fastp samtools star \
-c bioconda -c conda-forge

-c 参数顺序有讲究:-c bioconda -c conda-forge 表示优先从 bioconda 找(生信工具),找不到再从 conda-forge 找(通用依赖)。顺序反过来可能导致 conda-forge 的同名旧包覆盖了 bioconda 的新版。

4.2 激活与退出#

Terminal window
# 激活
conda activate rnaseq_project
# 验证——前面应该出现环境名
# (rnaseq_project) root@localhost:~$
# 查看环境中装了哪些软件
conda list
# 退出回到base
conda deactivate

4.3 克隆环境——做实验前的安全保障#

要对环境做大改动时(比如升级某个关键软件),先克隆一份,搞崩了还有退路:

Terminal window
conda create -n rnaseq_backup --clone rnaseq_project -y

这个操作只复制包索引,不重新下载——快。

4.4 导出与复现#

写完论文要发表,审稿人问”你用的什么软件版本”?一条命令导出:

Terminal window
# 导出完整环境(含所有依赖,80行+)
conda env export -n rnaseq_project > environment.yml
# 查看
head -20 environment.yml

输出示例:

name: rnaseq_project
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- _openmp_mutex=4.5=20_gnu
- bzip2=1.0.8=hda65f42_9
- fastp=1.3.3=h43da1c4_0
- fastqc=0.12.1=hdfd78af_0
- python=3.10.16
...

对方用 conda env create -f environment.yml 就能 100% 复现你的环境。但注意: 导出文件里写死了 channel 和 build 号,跨平台可能不兼容。只给同事用可以,要发 supplementary material 的话建议改成简版:

Terminal window
conda env export -n rnaseq_project --no-builds > environment_cross_platform.yml

4.5 清理与删除#

Terminal window
# 清理下载缓存(跑久了能回收几个G)
conda clean -a -y
# 删除环境
conda env remove -n rnaseq_project
# 列出所有环境
conda env list

输出:

base /opt/miniconda3
rnaseq_project * /opt/miniconda3/envs/rnaseq_project

* 是当前激活的。

5. Conda 软件包管理#

5.1 安装软件的几种写法#

Terminal window
# 方式1:指定channel(推荐,明确来源)
conda install -c bioconda samtools
# 方式2:不指定channel(靠配置的channel顺序自动找)
conda install samtools
# 方式3:指定版本
conda install -c bioconda samtools=1.18
# 方式4:从特定channel装(conda-forge编译的版本通常更新)
conda install -c conda-forge samtools=1.20

5.2 查找可用版本#

Terminal window
conda search samtools

输出前几行:

samtools 0.1.12 0 bioconda
samtools 0.1.13 0 bioconda
...
samtools 1.20 0 conda-forge

同一个包在 bioconda 和 conda-forge 上都有,版本号还不一样。生信工具优先选 bioconda 的。

5.3 版本锁定——防止下次装包偷升级#

conda 默认行为是”如果你要装A,它可能会把依赖的B顺便升级”。这在活跃开发中经常导致环境跑飞。

Terminal window
# 在当前环境安装后,把已装包写入文件
conda list --explicit > pinned.txt
# 下次想恢复这个精确状态
conda install --file pinned.txt

或者用更轻量的锁定方式——只锁主要软件包:

Terminal window
echo "samtools=1.18" >> $CONDA_PREFIX/conda-meta/pinned

之后 conda 在装其他包时就尽量不动 samtools 版本。

6. 踩坑记录#

坑1:base 环境不要装任何生信软件#

新手常犯的错:什么都在 base 里装。结果 base 环境装了 200+ 包,版本冲突后整个 conda 都坏了。

解决: base 只装 conda 自身 + 可能一个 python。所有生信软件都在独立环境里。

坑2:conda install 和 pip install 混用崩环境#

症状:conda install 之后用 pip install 补了个包,然后 conda 命令全报错。

原因:pip 不知道 conda 的依赖树,它写的文件可能覆盖 conda 管的东西。

解决: 优先全用 conda 装;必须用 pip 的话,放在最后且用 --no-deps

Terminal window
pip install --no-deps some-package

装完立刻测试核心命令能否运行。

坑3:磁盘不够——conda缓存偷偷吃掉几十G#

conda clean -a -y 清理的是已解压缓存,但还有一个地方常常被忽略:pkgs 目录

Terminal window
du -sh /opt/miniconda3/pkgs
# 可能十几GB...

手动删除不常用缓存:

Terminal window
conda clean --packages --tarballs -y

坑4:GLIBCXX 版本冲突#

某天装了个 conda-forge 的包,它自带的 libstdc++.so 覆盖了系统版本。然后非 conda 的软件(比如 Docker)全崩了。

根本解决:用 conda 的 --no-update-deps 避免次要依赖被升级:

Terminal window
conda install --no-update-deps -c bioconda new_tool

或者明确把 libstdcxx-ng 锁在系统兼容版本:

Terminal window
echo "libstdcxx-ng" >> $CONDA_PREFIX/conda-meta/pinned

坑5:环境激活后 which python 还是指向系统#

原因:conda init 没运行,或者 ~/.bashrc 没被加载。

Terminal window
# 确认conda初始化
/opt/miniconda3/bin/conda init bash
exec bash # 重新打开shell
# 测试
which python
# 应该输出 /opt/miniconda3/envs/xxx/bin/python,不是 /usr/bin/python

7. 生信环境模板#

我常用的一个生信基础环境:

Terminal window
conda create -n bioinfo_base -y \
python=3.10 \
fastqc fastp multiqc \
samtools bedtools \
bwa hisat2 \
subread \
-c bioconda -c conda-forge

装完约 2GB。新项目直接从这个克隆,不用每次从头装:

Terminal window
conda create -n project_2025 --clone bioinfo_base -y

8. 小结#

操作命令注意
安装Minicondawget ... && bash-p /opt 统一路径
配置镜像conda config --add channels先 bioconda 再 conda-forge
创建环境conda create -n 名 python=3.10指定版本防止自动选老的
克隆conda create --clone不需要重新下载,快
导出conda env export > file.yml跨平台加 --no-builds
激活conda activate 名命令前面出现环境名就对了
清理conda clean -a -y每月跑一次

本文于 2025-01-15 在 Debian 12 上实测完成,Miniconda3、fastqc v0.12.1、fastp 1.3.3 均为实际安装版本。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Conda环境管理:安装、镜像源、环境操作
https://fg.ink/posts/conda-env-management-bioinfo/
作者
风观
发布于
2024-07-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
风观
风有来路,观有所思
分类
标签
站点统计
文章
50
分类
1
标签
29
总字数
61,837
运行时长
0
最后活动
0 天前

文章目录