Posted in: IT, Python

Conda是什么

可能在很多网上都能找到跟Conda相关的教程。那么Conda到底有什么用呢?其实它的主要目的就是解决这种千古难题:

如何在老服务器(例如CentOS 6)上安装Python 3.8?R 4.0?Perl 5.26?而且你可能没有root权限?

在Conda出现之前,这个问题基本束手无策。Conda出现之后这个问题迎刃而解,所需要的前提只有一个:你拥有足够大的硬盘空间。在Conda下你的操作场景可能是:

  1. 登陆Server,自动进入Conda的基础环境(base)
  2. 在base安装Python 3.8,完成任务A
  3. 需要执行特殊任务B,需要老的Python 3.2,则新建一个环境(env),进入、安装Python 3.2,执行。
  4. 退出,回到base,继续用Python 3.8完成其他任务C、D、E

值得一提的是,你无需为各种环境变量发愁(例如Python的第三方包安装在什么路径下面?Perl的CPAN包安装在什么路径下面?R的CRAN包安装在什么路径下面?所有的这些,Conda的环境都已经帮你包装好了。你所需要做的,就是:进入环境——安装软件——执行任务——退出环境。当然代价是所需硬盘空间大了。

Conda的重要操作

需要注意的是Conda所有操作都不需要root权限,所有文件都位于家目录下面某个位置(在你第一次安装时设定,这是唯一需要记住的位置)。重要操作如下:

  1. 安装Conda、添加频道和设置源地址
  2. 在base环境中安装软件。
  3. 新建特定的环境。
  4. 在环境中安装软件。
  5. 在环境中(包括base)执行任务。
  6. 在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是剧毒的曼巴蛇)

Comments (2) on "Conda是什么"

    1. Safari 14.0.2 Mac OS X  10.15.6

      没有conda时确实很麻烦,有conda之后太方便了,什么都不用设置,切换环境就可以了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注