第二章:Conda环境管理基础
很多新手一上来就问我:“老师,装个软件直接pip不就完事了吗?为啥还要搞什么环境?”
嗯,这个问题我当年也问过。直到有一次,我在一个项目里需要用Python 2.7跑一个老脚本,同时另一个项目要求Python 3.8以上。你想啊,一台机器上同时装两个Python版本,依赖包还互相打架——那场面,简直比春运还乱。
Conda环境的作用,说白了就是给每个项目一个独立的“小房间”。房间里装什么版本的Python、什么版本的R、哪些依赖包,完全你自己说了算,互不干扰。这比你强行把所有东西塞在系统里要优雅得多。
为什么需要环境隔离?
我在做生物信息分析时有个习惯:每个RNA-seq项目单独建一个环境。为什么?因为DESeq2和edgeR对依赖包版本的要求完全不同。有一次我强行在一个环境里装两个工具,结果一个要dplyr 1.0.0,另一个非要0.8.5,最后两个都跑不起来。
你想想看,要是没有环境隔离,你只能有两种选择:要么每次卸载重装,要么放弃其中一个分析。都不是什么好主意。
环境管理的核心流程
我们先看一眼Conda环境管理的全貌,后面一个个拆开细讲。
1. 创建环境
Conda创建环境的命令很简单,就一行:
conda create -n myenv
这里的-n后面跟的是环境名称,你可以随便起名。但我的建议是:名字要有意义。比如rna-seq、scRNA、bulk-rnaseq这种。别起什么test1、test2——到后来你自己都分不清哪个是哪个。
通常创建环境时会指定Python版本,比如:
conda create -n rnaseq python=3.9
这行命令会创建一个名为rnaseq的环境,并安装Python 3.9。如果你不指定版本,Conda会用默认版本——我个人不太推荐这么干。因为不同项目对Python版本要求不一样,明确指定最稳妥。
conda create -n rnaseq python=3.9 pandas numpy matplotlib省得后面一个一个装。
2. 激活与退出环境
环境建好了,得先“进去”才能用。这个过程叫激活:
conda activate rnaseq
激活后,你会看到命令行前面多了一个括号,里面是环境名:
(rnaseq) user@machine:~$
有这个括号,就说明你已经在rnaseq环境里了。这时候你装的任何包、跑的任何命令,都只对这个环境生效,不影响外面。
那怎么出来?简单:
conda deactivate
命令行的括号就没了,你又回到了base环境。
conda activate一下。
3. 列出环境
时间长了,你电脑上可能有好几个环境。怎么查看都有哪些?
conda env list
或者也可以用:
conda info --envs
两个命令效果一样,输出大概长这样:
# conda environments:
#
base * /home/user/miniconda3
rnaseq /home/user/miniconda3/envs/rnaseq
scRNA /home/user/miniconda3/envs/scRNA
bulk-rnaseq /home/user/miniconda3/envs/bulk-rnaseq
注意看,base前面有个星号(*),表示当前激活的环境。如果你在rnaseq环境里执行这个命令,星号就会跳到rnaseq那一行。
我记得有一次帮同事排查问题,他死活说自己的环境里装了某个包,但我一查他实际在base环境里干活。所以啊,做事前先conda env list看一眼,确认自己在哪,能省很多麻烦。
4. 删除环境
环境不用了怎么办?删掉。
conda remove -n rnaseq --all
或者:
conda env remove -n rnaseq
两条命令完全等价,任选一条就行。
rnaseq环境里,先conda deactivate退出来,再删。
我曾经在一台共享服务器上干活,上面有上百个环境,好多都是别人废弃不用的。一个个去试哪些还能用?不现实。我的做法是先列出所有环境(conda env list),然后把名字里带test、tmp、backup这些明显是临时的环境,先确认没人用再删掉。
环境管理操作一览表
| 操作 | 命令 | 说明 |
|---|---|---|
| 创建环境 | conda create -n 环境名 python=版本 |
建议指定Python版本 |
| 激活环境 | conda activate 环境名 |
进入指定环境 |
| 退出环境 | conda deactivate |
返回base环境 |
| 列出环境 | conda env list |
显示所有环境,*表示当前 |
| 删除环境 | conda env remove -n 环境名 |
先退出再删除 |
好了,Conda环境管理这块的基础操作就这些。说实话,真正用起来就是几条命令来回倒。但就是这几条命令,搞清楚了,后面装DESeq2和edgeR时就不容易出乱子。
你想想看,要是环境管理都没搞明白,装完工具发现版本不对、包冲突——到时候查起来可比现在花时间多了。所以别嫌基础,打好地基再盖楼,稳得很。