3. Conda 基础命令:创建、激活、退出、删除环境
好,我们正式开始动手操作。这一章说白了就是 conda 的「四板斧」——创建环境、激活它、用完了退出来、不要了就删掉。这四个命令你以后每天都会敲,闭着眼睛也得打出来。
我刚开始用 conda 时,总记不住 conda activate 和 source activate 的区别。后来踩了坑才发现,不同版本、不同系统下的行为还真不一样。今天我就把这些经验一次性说清楚。
3.1 环境到底是什么
你可以把 conda 环境理解成一个「独立的小盒子」。每个盒子里装着你需要的 Python 版本、各种包和它们的依赖。盒子之间互不干扰。
举个例子:你同时在做人 RNA-seq 和 ChIP-seq 分析。RNA-seq 需要 STAR 2.7.10,而 ChIP-seq 要用 MACS2,它依赖的 Python 版本还跟 STAR 不一样。如果没有环境隔离,你每次跑分析前都得卸载重装,想想就头大。
conda 的核心价值就在这里——一个项目一个环境,依赖彻底锁定。
核心原则:每个独立的分析项目,都创建一个全新的 conda 环境。不要所有东西都塞在 base 里。
3.2 创建环境
创建环境的命令就一个:
conda create -n rnaseq_env python=3.9
解释一下各个参数:
- -n 是
--name的简写,后面跟环境名字。名字随意,但建议用项目名或分析类型,比如rnaseq_env、scRNA。 - 后面可以指定 Python 版本,也可以直接列包名。
我个人习惯创建环境时就指定好 Python 版本。为什么?因为 RNA-seq 很多工具对 Python 版本有硬要求。比如 HTSeq 在 Python 3.9 上工作正常,但有的旧版工具只支持 3.7。你想想看,如果创建时不指定,默认用的是 base 环境的 Python 版本,后面版本冲突了还得重来。
创建时直接装好常用包也很常见:
conda create -n rnaseq_env python=3.9 samtools bedtools fastqc
这样一次装好,省得后面一个一个装。但要注意,第一次创建环境时 conda 会解析所有依赖,这个过程可能有点慢,尤其是网络不好的时候。
小技巧:创建环境时可以加 -c conda-forge 指定频道。比如 conda create -n rnaseq_env -c conda-forge python=3.9。conda-forge 频道里的包更新更全,RNA-seq 工具基本都在里面。
创建完成后,命令行会提示你激活环境。
3.3 激活环境
激活环境很简单:
conda activate rnaseq_env
激活后,你会看到命令行的前面多了个 (rnaseq_env) 括号。这时候你安装的所有包,都只会装到这个环境里,不会污染其他环境。
⚠️ 注意:在旧版 conda(4.6 以下)或者某些 Linux 系统上,你可能需要用 source activate rnaseq_env。但从 conda 4.6 开始,官方推荐统一用 conda activate。
避坑提醒:我曾经在服务器上遇到过明明激活了环境,但 python --version 显示的还是 base 的版本。后来发现是因为 shell 初始化没做。运行 conda init bash 就好了。如果你碰到类似问题,不妨试试这个命令。
顺便提一句,激活环境后你可以用 which python 或者 which samtools 确认当前用的是哪个路径下的程序。一个正常的激活后,路径应该指向你的环境目录:
# 激活前
$ which python
/usr/bin/python
# 激活后
$ conda activate rnaseq_env
$ which python
~/miniconda3/envs/rnaseq_env/bin/python
3.4 退出环境
退出当前环境就一个字:
conda deactivate
敲完后,命令行前的 (rnaseq_env) 就消失了,你回到了 base 环境。如果你想直接回到系统自带的 Python,那就执行 conda deactivate 直到括号完全消失。
这里有个小细节:每次退出环境时,我习惯看一眼当前目录。有时候你装了某个包后,会在当前目录生成文件,退出环境后直接删除怕搞错。嗯,其实没什么大问题,但你最好养成好习惯。
3.5 删除环境
环境不用了,或者装坏了想重来,就删掉它:
conda remove -n rnaseq_env --all
加上 --all 意思是把这个环境里的所有包和环境本身一起删除。如果不加,只删除某个包。
当然,你也可以先看看自己有哪些环境:
conda env list
或者
conda info --envs
这两个命令效果一样,会列出所有环境以及当前激活的环境(前面会有 * 标记)。
注意:删除环境前要确保你已经退出了那个环境。你不能删除当前激活的环境。如果你在 rnaseq_env 里面,直接运行删除会报错。要先 conda deactivate,然后再删。
我个人经验:做 RNA-seq 分析时,经常会因为版本不对反复创建删除环境。别嫌麻烦,一个干净的环境比什么都重要。我有一次跑 HISAT2 时一直报错,排查了两天发现是环境里混了不同版本的依赖。最后删掉重建,五分钟解决。
3.6 常用操作总结
下面这个表格你把几个核心命令记住就行,其他到了用时再查:
| 操作 | 命令 | 说明 |
|---|---|---|
| 创建环境 | conda create -n 环境名 python=版本 |
创建时指定 Python 版本,避免后续冲突 |
| 激活环境 | conda activate 环境名 |
进入环境,所有操作都在该环境下进行 |
| 退出环境 | conda deactivate |
返回上一级环境,通常是 base |
| 删除环境 | conda remove -n 环境名 --all |
删除整个环境和所有包,不可恢复 |
| 查看环境列表 | conda env list |
显示所有环境,当前环境前有 * |
3.7 完整操作流程演示
最后,给你看一个完整的操作流程。假设我们要为 RNA-seq 分析创建一个专用环境:
# 1. 创建环境
conda create -n rnaseq_tutorial python=3.9
# 等待 conda 解析依赖...输入 y 确认安装
# 2. 激活环境
conda activate rnaseq_tutorial
# 3. 安装关键工具
conda install -c conda-forge -c bioconda samtools bedtools fastqc hisat2 subread
# 4. 验证安装
which samtools
samtools --version
# 5. 用完后退出
conda deactivate
# 6. 如果以后不用了,删除
conda remove -n rnaseq_tutorial --all
嗯,这套流程你反复练几遍,肌肉记忆就有了。
3.8 本章核心结构图
下面这张图帮你把 conda 环境的生命周期串起来:
你仔细看这个流程。我当初犯过的错就是:创建环境后不激活直接装包,结果装到了 base 里。还有一次是激活环境后,想删除它却忘了先退出,命令一直报错。都是小问题,但特别折磨人。
一句话总结:创建→激活→使用→退出→删除,五步走。每一步都确认一下当前在哪个环境,用 conda env list 看一下,稳得很。