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