conda关于频道和存储包pkgs的详解(副pytorch环境安装)

本博客于2023.5.10更新,添加了频道的具体作用机理的举例

conda安装pytorch

使用官网提供的语句

conda install pytorch torchvision torchaudio cudatoolkit=11.6 -c pytorch -c conda-forge

-c 既是–channel,优先从pytorch 和conda-forge两个频道搜寻相应的包,但这两个频道是在哪里呢?

初看频道

打开anaconda的总配置文件.condarc ,一般在C:\Users\xxx.condarc 下,没有就要执行

conda config

会自动在C:\Users\xxx 用户根目录创建.condarc,可以每一个环境都会有一个额外的.condarc在各自的文件夹中,目前来看作用不大,在虚拟环境中对config的操作也都是对总配置文件生效的

conda关于频道和存储包pkgs的详解(副pytorch环境安装)
打开总.condarc,可以看到
channels:
  - conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.aliyun.com/anaconda/pkgs/main
  - https://mirrors.aliyun.com/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
channel_priority: strict

在custom_channels里可以看到conda-forge和pytorch,他们都指向了清华源,因此最初的命令是从清华源去找数据。
channels就是目前的频道,也就是包存储库,我们从频道下载包,从高到低为频道的优先级,会从最高的开始找,找不到就找下一个频道,知道有满足条件的包为止,conda-forge优先级最高,因为他最好,defaults最低,因为网上资源都说defaults不好。
default_channels就是channels中的defaults,有三个包库。

更正: channels里面的信息要尽可能少,最好是只有一个defaults,不然每次下包的时候要更新本地的包index信息,以及查找要花费更多的时间,我们应当尽可能地指名他在那个频道,而不是每个频道都去找,修改condarc如下

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

具体的一个搜索流程下面会介绍
让channels里面尽可能少,同时删去

channel_priority: strict

strict会使环境的依赖判断非常严格(好像默认就是strict,那这一行删不删就无所谓了)

conda install mamba -c conda-forge

我们直接指定他在conda-forge频道,那么他就可以尽可能缩小范围地去寻找。

数据源配置好后直接调用如下命令清除索引即可生效

conda clean -i

包搜索的具体流程和各个频道的用法(重要)

就以我上文使用到的命令举例,可以更好理解

conda install pytorch torchvision torchaudio cudatoolkit=11.6 -c pytorch -c conda-forge

以及使用的condarc文件

channels:
 - defaults
show_channel_urls: true
default_channels:
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

可以看到频道分为了三个部分,channels、default_channels、custom_channels

  • 其中channels就是我们最终要搜索的频道, channels里面的频道都会被搜索
  • default_channels就是在channels中的defaults,有三个频道,默认频道,因此channels默认有三个频道
  • custom_channels 是键值对,可以理解为字典,在指定-c 命令时会用到,通过频道名找到仓库的具体url,比如-c pytorch,就是指定了一个库是https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud,也就是custom_channels的第四行, *需要注意custom_channels的频道不指定-c是不会查找的,只有指定频道也就是-c命令时才会去进行查找

第一步:确认要查找哪些频道

由于我们使用-c命令指定了两个频道,-c pytorch -c conda-forge根据condarc的custom_channels可知我们要额外搜索conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud 和pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud(实际上是一个网址)
再结合channels,最终要查找的频道是

https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud(该频道由conda-forge指定)
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud(该频道由pytorch指定)
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main(该频道由channels的default给出)
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r(该频道由channels的default给出)
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2(该频道由channels的default给出)

查找频道优先级为从上倒下查找,可以看到-c指定的优先最高,其次就是channels里面的频道排在后面

第二步:进行搜索

首先对本地进行搜索包,看之前有没有下载过(这个后面会细讲),如果本地没有就对上面最终要查找的频道进行搜索,直到找到包。

其他问题

使用下面语句不添加两个频道直接下载

conda install pytorch torchvision torchaudio cudatoolkit=11.6

会出现报错:

Problem: nothing provides requested torchaudio

意思是没有频道提供需要的包torchaudio,因为torchaudio只存在在pytorch频道中,我.condarc中channels没有关于pytorch的频道,所以找不到包导致安装失败。

使用mamba 代替conda下载

mamba install pytorch torchvision torchaudio cudatoolkit=11.6 -c pytorch -c conda-forge

会出错:

File not valid: file size doesn't match expectation

这是因为mamba 的审查机制严格,我们要从源下的包和要用到的包的size 不一致,无法安装。
解决方案1: 使用anaconda官方源

custom_channels:
conda-forge: https://conda.anaconda.org
pytorch: conda-forge: https://conda.anaconda.org

解决方案2(推荐): 全部改成阿里源

custom_channels:
  conda-forge: http://mirrors.aliyun.com/anaconda/cloud
  msys2: http://mirrors.aliyun.com/anaconda/cloud
  bioconda: http://mirrors.aliyun.com/anaconda/cloud
  menpo: http://mirrors.aliyun.com/anaconda/cloud
  pytorch: http://mirrors.aliyun.com/anaconda/cloud
  simpleitk: http://mirrors.aliyun.com/anaconda/cloud

conda包下载机制的解析

conda包下载主要涉及两个(种)文件夹,位于anaconda3主目录下的pkgs文件夹,和每一个环境地Lib文件夹下的site-packages文件夹。
pkgs文件夹存储了下载的包,每次下载的包都会存在这里,可以存储1个包的不同版本
site-packages文件夹,相当于每一个环境要用到的包,一个环境有一个site-packages,也说明了不同环境的是独立的。我要在环境a中下载一个包,首先看pkgs里有没有,没有则从网上下载到pkgs里,然后再复制一份相同的给a的site-packages文件夹,这样a也有了一个相同的环境。
这样做的好处是:
相同的包不同环境要用不用重复下载,直接复制一份到该环境即可,非常地方便,这也是为什么每次新建环境,克隆环境这么快,我直接复制粘贴就好了,克隆环境是对被克隆地文件夹中地所有文件都复制一份,不止复制了site-packages文件夹。
验证:
可以在pkgs和site-packages找到完全一样地的包,明显是复制来的。
同理克隆环境的话两个环境的文件夹大小是完全相同的。

conda关于频道和存储包pkgs的详解(副pytorch环境安装)

Original: https://blog.csdn.net/zxyOVO/article/details/127254650
Author: wa1ttinG
Title: conda关于频道和存储包pkgs的详解(副pytorch环境安装)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/770547/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球