• Conda Channel 介绍与配置


    《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。
    简单讲:Conda 的 Channel 就是 Repo,也常被称作“源”,它与 Yum 和 Maven 中的 Repository 性质是一样的,用于存放各种 Python 包的公共库。应该说,Conda 的 Channels 机制设计的有些怪异,可能是有历史原因,比之Yum 和 Maven 来说,繁琐且没有必要。

    想要正确配置 Channel,特别是 Mirror Channel (镜像源),必须先得搞清楚 Channels 的默认配置,然后才能理解怎样配置镜像源才是正确的。网上很多添加镜像源的做法都不尽相同,解释也很混乱(这种情况在 Python 世界很常见,很多阿猫阿狗写的都是劣质文章,然后再以讹传讹,导致了更糟糕的局面),本文一切以官方文档为准,争取给出最准确的解释。

    1. Conda 对 Channel 的设计和分类

    我们先看一下默认情况下,即:不做任何配置时,Conda 的 Channels 是什么,又是怎么配置的。首先,Conda 从设计上就根据包的来源分成了两类,使用了两个不同的站点,一类是 defaults channel,另一类是 community channel,要特别注意的是:defaults channel 不是各种 channel 的默认值,而是一个(一组)独立的 channel,当命令行没有显式指定 channel 名时,就会从这它这去查找包

    Conda 将 channels 分成 defaults 和 community 两类的设计直接体现在了配置上,所有的 default channels 统一使用defaults这个名称,具体有哪些源,配置在default_channels中,community channels 则由 channel_aliascustom_channels来配置,前者统一指向一个站点,后都可以单独配置部分 channel 的站点地址。

    在不提供任何配置的情况下( %USERPROFILE%\.condarc文件为空),两类 channel 都有默认值,default channels 的默认站点是 repo.anaconda.com,community channel 的默认站点是 conda.anaconda.org。默认站点不会也不需要显式配置在%USERPROFILE%\.condarc文件中,他们都 hard code 在了conda里,但我们要清楚默认这些配置的默认值,因为在配置镜像源时,需要对等地替换站点。

    关于 conda channel相关的所有默认配置,都可以通过以下命令打印出来:

     conda config --show
    
    • 1

    2. 常见 Channel 介绍

    在详细介绍 channel 的配置时,有必要介绍一些常见的 channel。

    • Default Channel:严格地说,它是指 defaults 这个 channel 的默认值,站点地址是 https://repo.anaconda.com,由 Anaconda 公司维护,下一节会重点介绍。该站点有详细的自我介绍:https://repo.anaconda.com/pkgs/ ,在 conda 默认配置中,defaults 这个 channel 只配了三个子的 channel, 分别是:

      • pkgs/main: 从该 channel 包含的包来看(https://repo.anaconda.com/pkgs/main/linux-64/),它主要提供 python 最基础最常用的包,像 numpy, pandas 在该 channel 中都可以找到
      • pkgs/r:主要提供 R 语言使用的包(https://repo.anaconda.com/pkgs/r/linux-64/)
      • pkgs/msys:该 channel 只出现在 windows 版的 conda 中,MSYS可以看做是 Cygwin 的简化版,该包是 windows 上很多 python 包的依赖和基础,对 windows 系统下的 conda 是必须的
    • Community Channel:严格地说,它是 Conda 的 Community Channel 的默认值,站点地址是 https://conda.anaconda.org ,该 Channel 通常比默认 Channel 包含更多的包,更新也更快 (但可能未经完全测试)

    • Conda-Forge Channel:最常用的一个 Channel,也是由社区维护的,包含的包很全,更新也很即时

    • Bioconda Channel:这是 Bioconda 的一个 Channel,Bioconda 是一个管理生物信息软件的工具软件,它基于 anaconda 可以进行生物软件的搜索、下载、安装、升级、删除等操作,Bioconda 可以视作生物信息软件的AppStore,所以这个 Channel 包含的主要是 7000 多个 Bioinformatics(生物信息学)领域的包

    • Pytorch Channel:与 Pytorch 及其依赖相关的 Channel

    3. Defaults Channel 的默认配置

    我们先看一下 defaults channel 的默认配置,如果显式地展开,它的实际配置应该是这样:

    channels:
      - defaults
    default_channels:
      - https://repo.anaconda.com/pkgs/main
      - https://repo.anaconda.com/pkgs/r
      - https://repo.anaconda.com/pkgs/msys2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    也就是说: defaults 是一个独立的 channel,且名称固定,不可修改。这个 channel 实际包含哪些源(站点)是由 default_channels 来“展开”描述的,因为默认 channel 只有一个名称(即 defaults),但是需要作为默认源的 channel 可能会有很多,所以必然是个一对多的关系,因此需要引入default_channels以列表结构描述。

    4. Community Channel 的默认配置

    下面是 community channels 的默认配置,如果显式地展开,它的实际配置应该是这样:

    channel_alias: https://conda.anaconda.org
    
    • 1

    当我们使用conda install -c conda-forge ...时,访问的 channel 地址就是:https://conda.anaconda.org/conda-forge/

    如果我们不想改动全部的 community channel 的源,只是想修改一部分,则应该使用custom_channels,后续的镜像源配置中会看到。

    5. 标准的镜像源配置

    最清晰,也是最标准的镜像源配置方式应该是:在默认配置中的替换相应站点地址!我们以北外镜像为例,配置如下:

    channels:
      - defaults
    default_channels:
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
    channel_alias: https://mirrors.bfsu.edu.cn/anaconda/cloud
    show_channel_urls: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改后,可以使用下面的测试命令快速构建一个虚拟环境,看一下包的下载地址和速度如何:

    set ENV=test-env
    
    conda deactivate
    conda remove -y -n %ENV% --all
    conda clean  -y -i
    conda create -y -n %ENV% python=3.10
    conda activate %ENV%
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果后续在使用过程中用到了镜像站点中没有的新 channel, 有两种应对方式:

    1. 如果新的 channel 是一个很少使用的生僻 channel, 可在命令行中以 conda install -y -c https://my-mirror.com/my-channel ... 的形式显式指定其url;
    2. 如果新的 channel 是一个常用 channel,又不在 channel_alias 指定的镜像源中,可以将其添加到custom_channels中,使用conda install -y -c my-channel ...的形式指定它

    6. 配置部分 Channel 的镜像源

    如果出于某些原因,你可能不想让所有的 Community Channel 都走镜像站点(可能你想要使用的 Community Channel 在镜像站点上没有),那就需要针对某一个Community Channel 单独配置,我们以清华镜像站点(https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)给出的官方配置为例,它就是在严格遵循默认配置基础上,修改了 default_channels 上三个默认的 chennel 的站点地址,同时,只配置了 conda-forg,bioconda等几个常用的 Community Channel 的镜像,其他的默认还是在用默认的站点:

    channels:
      - defaults
    default_channels:
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
      - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
    custom_channels:
      conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud
      msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud
      bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud
      menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud
      pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud
      pytorch-lts: https://mirrors.bfsu.edu.cn/anaconda/cloud
      simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud
      deepmodeling: https://mirrors.bfsu.edu.cn/anaconda/cloud
    show_channel_urls: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    清华站点的这份配置没有什么问题,但也没有必要配置的这么细致,上面北外的版本其实更简单有效。有一个细节要清楚:当命令行中显式地使用-c your-channel来指定一个channel,并且这个 channel 又在custom_channels的 channel 列表中时,Conda 会直接使用custom_channels中配置的 channel 地址,如果显式地指定了 channel 名,而custom_channels又没有配置对应地址,还是要到 channel_alias 设定的站点上去查找,如果还没有,就会报错了。

    7. 仅配置 channels 列表

    你会发现不少文章介绍配置镜像源的方法是:仅仅在 channels 上添加镜像站点的地址,基于上述的解释,我们来分析一下这种形式下 channels 是如何生效的。以下是在很多文章中经常看到的仅配置 channels 列表的操作:

    conda config --set show_channel_urls yes
    conda config --set channel_priority strict
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    conda config --show channels
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行后,输出的 %USERPROFILE%\.condarc文件是这样的:

    show_channel_urls: true
    channel_priority: strict
    channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 已不再支持,应该移除
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
      - defaults
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    首先:channels中列出的各个源在检索时是有优先级的,包管理器会按照从上到下的顺序逐一搜索包,如果在第一个源中找不到,再去第二源中查找。所以上述配置中,conda-forge 将具有最高优先级,所有的包都会优先从这个 channel 开始查找。鉴于 conda-forge 的全面性和更新的及时性,这里选择将其放在最前面是合理的。第二项pkgs/free已经不再支持,上述是旧的配置,不必再配置这一 channel。第三项pkgs/main本是default_channels的默认列表中的第一项,这里提前到 channels 中定义,且替换为了镜像站点。最后,defaults 本来会出现在配置中(使用conda config命令时会自动创建%USERPROFILE%\.condarc文件,生成的文件在 channels 下面都是 - defaults),我们没有显式地删除它,所以它一直存在并已位于最列表最后,具有最低的优先级。

    总得来说,从 Conda Channels 的设计思路上出来,直接更改 channels 不是一个很好的做法,还是遵循第4节的配置方式为宜。

    8. 设置代理

    除了配置镜像源,如果你有自己的VPN,还可以考虑使用代理加速包的下载,以下是一个示例参考:

    conda config --set proxy_servers.http http://127.0.0.1:32768
    conda config --set proxy_servers.https http://127.0.0.1:32768
    
    • 1
    • 2

    以上全部配置好之后,你可能会发现包的下载会非常之快,但是在下载前会一个 Solving environment 阶段,这一步往往要耽误很长时间,这是 Conda 被广泛诟病的地方,其实这一过程并没有太多的网络通信,时间都花在了解析包依赖上。关于如何解决这一问题,我们将在《Python 环境构建最佳实践:联合使用 Mamba + Conda + PIP》一文中专门介绍。

  • 相关阅读:
    docker容器内访问宿主机127.0.0.1服务
    JavaScript详解(二)
    SpringCloud引入SpringBoot Admin
    MySQL数据库(五)
    [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
    对主流网络威胁情报标准应用的比较研究
    【jmeter】jmeter脚本高级写法:接口自动化脚本内全部为变量,参数(参数可jenkins配置),函数等实现完整业务流测试
    如何冻结模型,避免 model.train() 改变模型部分模块
    实用TCP协议(1):TCP 协议简介
    【无标题】灵遁者:一个好听的名字当然重要,因为这个名字代表你
  • 原文地址:https://blog.csdn.net/bluishglc/article/details/133803301