可能在很多网上都能找到跟Conda相关的教程。那么Conda到底有什么用呢?其实它的主要目的就是解决这种千古难题:
如何在老服务器(例如CentOS 6)上安装Python 3.8?R 4.0?Perl 5.26?而且你可能没有root权限?
在Conda出现之前,这个问题基本束手无策。Conda出现之后这个问题迎刃而解,所需要的前提只有一个:你拥有足够大的硬盘空间。在Conda下你的操作场景可能是:
- 登陆Server,自动进入Conda的基础环境(base)
- 在base安装Python 3.8,完成任务A
- 需要执行特殊任务B,需要老的Python 3.2,则新建一个环境(env),进入、安装Python 3.2,执行。
- 退出,回到base,继续用Python 3.8完成其他任务C、D、E
值得一提的是,你无需为各种环境变量发愁(例如Python的第三方包安装在什么路径下面?Perl的CPAN包安装在什么路径下面?R的CRAN包安装在什么路径下面?所有的这些,Conda的环境都已经帮你包装好了。你所需要做的,就是:进入环境——安装软件——执行任务——退出环境。当然代价是所需硬盘空间大了。
Conda的重要操作
需要注意的是Conda所有操作都不需要root权限,所有文件都位于家目录下面某个位置(在你第一次安装时设定,这是唯一需要记住的位置)。重要操作如下:
- 安装Conda、添加频道和设置源地址
- 在base环境中安装软件。
- 新建特定的环境。
- 在环境中安装软件。
- 在环境中(包括base)执行任务。
- 在HPC(集群)中执行任务。
除了最后一项之外,其他所有的都能在网上找到教程。下面这些只做为我自己简单备忘录。
安装Conda、添加频道和设置源地址
安装中途会让你指定安装地址(默认是~/miniconda3
),需要记住。
安装完之后退出终端再重新登陆,你会发现变成了这样:
(base) [myusername@log1 ~]$
前面的(base)
表示你已经处于Conda的base环境下,这是由于安装过程中自动帮你设置了~/.bashrc
。对于这种行为有人感到讨厌,有人觉得方便。这些都没问题,你要觉得讨厌。自己去把~/.bashrc
里面不想要的内容删除就好了。事实上,Conda如此强大以至于让它接管整个系统一点问题也没有。想想以前没有root权限的情况下安装软件多么痛苦。
添加频道和源地址的方法:
(base) [myusername@log1 ~]$ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
(base) [myusername@log1 ~]$ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/
(base) [myusername@log1 ~]$ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
# 以下两个是给我所在的计算生物学行业使用的
(base) [myusername@log1 ~]$ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/
(base) [myusername@log1 ~]$ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/r/
这些内容实际上被写入了 /home/myusername/.condarc
,可以进去看看,发现有重复的可以删掉。
安装、更新、删除软件
# 以安装R为例
conda install R #会显示版本让你确认,写文章时默认是3.6
# 安装指定版本
# 一个等号是模糊匹配,两个等号是精确匹配
conda install R=4.0
# 安装高于某版本,注意不要漏掉引号
conda install 'samtools>1.10'
# 更新
conda update R
# 移除
conda remove R
# 显示当前已安装的软件
conda list # 可以跟上软件名字
显然,这些操作全部只影响base环境。
这里还有个问题:我怎样知道软件包的准确名字?答案是在Anaconda官网里面搜索。
新建特定的环境并在其中执行任务
# 新建一个叫做 myenv 的环境
conda create -n myenv # python=3或2可选
# 查看所有环境
conda env list
# 激活环境
conda activate myenv
# 然后进行正常的安装、运行等操作。
# 退出环境
conda deactivate # 回到base
# 删除环境
conda remove -n myenv --all
注意:默认情况下,base环境和新建的环境之间是并列关系,不是继承关系。这意味着base环境下自己安装的所有软件都不能在新环境的使用。(至于以后会不会发展出一些特定参数能够继承base中的某些软件?也有可能)。时间不着急、空间不紧的,建议重新安装软件。时间紧或空间紧的可以自己做一些超级链接。
在HPC(集群)中执行任务。
这是很多教程里没有讲到的。其实也很简单,在提交的脚本最前面加上如下内容就好了:
# 进入base环境
source /your/path/to/miniconda3/bin/activate # 这就是之前说要记住的位置
# 执行自己的任务
# ......
# 进入myenv环境
conda activate myenv
# 执行自己的任务
# ......
# 退出myenv环境,回到base
conda deactivate
# 执行自己的任务
# ......
可见不论是在本地运行还是在HPC上运行,你所需要做的就是切换环境,而无须考虑各种复杂的环境变量。
卡在solving environment了?
mamba大法好(mamba是剧毒的曼巴蛇)
解释得很详细,可我看不太懂,python环境很麻烦,经常有些包安装总是出错,而我又不会解决….
没有conda时确实很麻烦,有conda之后太方便了,什么都不用设置,切换环境就可以了