最近开始深度搞搞AI相关东西,涉及到python和pytorch,第一步先把环境问题搞清楚。python的东西是真的乱……网上的信息几乎没有一个能完整说清楚的,大量的错误信息。
python
为什么不要使用常规的系统级安装方式而选择conda
首先安装python就是一个很大的问题,该选择什么样的安装方式呢?Linux各个发行版都自带python,Windows也可以下载安装python windows installer,但这种安装方式一律不建议,核心原因是:尽管我们可以通过venv这类环境管理软件来实现python env的创建与隔离,但每个python env所使用的python版本都只能是系统中安装的那个版本,无法灵活修改。更要命的是,Windows的installer还一大堆Bug,有无法正常卸载、卸载有残留等问题。
唯一正确的选择是使用conda。
如何正确安装conda:选择miniforge而非anaconda/miniconda
老生常谈的问题。anaconda和miniconda是商业产品,区别是anaconda会预装很多包,miniconda仅预装必要的包,所以miniconda体积小很多。而miniforge是开源社区主导的对标miniconda的产品。选开源产品就对了!
曾经还有mamba,比miniforge性能更好,但mamba现已合并到miniforge中,所以直接用miniforge就好
Linux安装
在github上搜索miniforge3,按说明下载安装即可。安装时建议不要让它自动修改shell,手动在bashrc里添加[[ -e "$HOME/miniforge3/bin/conda" ]] && eval "$($HOME/miniforge3/bin/conda shell.bash hook)"即可。安装完建议执行conda config --set auto_activate false,目的是不要让它在启动shell时自动激活。后面会详细讲.condarc的配置。
Windows安装
release页下载安装Miniforge3-Windows-x86_64.exe即可。安装时建议不要勾选注册为系统python和添加到PATH这两个选项,自己手动配就好了。
手动将以下路径加到PATH中(注意这些PATH要添加在%USERPROFILE%\AppData\Local\Microsoft\WindowsApps的上面才行,否则会优先使用WindowsApps下的python):
D:\work\library\win\miniforge3
D:\work\library\win\miniforge3\Library\mingw-w64\bin
D:\work\library\win\miniforge3\Library\usr\bin
D:\work\library\win\miniforge3\Library\bin
D:\work\library\win\miniforge3\Scripts
基本用法
# 创建名为test的环境
conda create -n test python=3.14
# 删除为test的环境
conda remove -n test --all
# 进入名为test的环境
conda activate test
# 退出当前python环境
conda deactivate
.condarc配置
首先,conda是一个通用的包管理器,可以装各种软件和python包,而pip只能用来装python包。但conda和pip使用的是完全不同的源,管理方式也不同,即使是同名的python包内容也可能不同。
我们先来看一个典型的.condarc是什么样的:
channels:
- conda-forge
show_channel_urls: true
auto_activate: false
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
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
配置细节详见文档。首先是两个建议配置:
show_channel_urls: 下载时显示是从哪个URL下载的auto_activate: 启动shell时自动激活python默认环境(base),很多地方写的配置都是auto_activate_base,其实是一样的
剩下的三个配置是channel相关的,下面详细讲。
conda源(channel)详解
首先要搞懂channel是个什么概念。channel是指conda包分发的通道,例如最大的channel是社区维护的conda-forge,nvidia也有自己维护的channel。不同的channel提供了不同的软件集合(当然不同的channel里也可能有相同的软件)。相当于把软件包套了层namespace,不同组织各自维护自己的channel(当然一个组织也可能维护多个channel)。
接下来看channels、default_channels、custom_channels这三个channel相关的配置是在配什么:
channels: 指定使用conda create和conda install这些命令时从哪些channel里搜索和安装。这里只需要写channel的别名,例如conda-forge。其中defaults是一个特殊的别名,下面会讲。custom_channels:指定channel别名所对应的地址,conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud指在使用conda-forge这个channel时,需要访问https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge来搜索和安装。default_channels: 专门用于配置defaults的特殊配置项,它等价于在custom_multichannels(类似于上面的custom_channels,但是是用于配置别名与channel之间是一对多的情况)配置中定义defaults,例如:
custom_multichannels:
defaults:
- 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
简单来说就是,channels指定channel别名,custom_channels中定义别名对应的地址,default_channels是定义defaults这个特殊别名所对应的地址,只不过这个别名对应了多个channel。
对于没有写在channels里的custom_channels,默认不会进行检索,需要通过手动指定的方式来安装这些channel里的软件。手动指定有两个方法:
- 通过
-c参数,例如conda install pytorch -c conda-forge(本次conda install操作增加对conda-forge这个channel里软件的检索) - 在包名前手动指定channel,例如
conda install conda-forge::pytorch(从conda-forge这个channel里检索pytorch并安装,指向更加精准)
miniforge与anaconda/miniconda在channel上默认行为的不同
先介绍两个命令:
conda config --show: 查看补上了默认值之后的.condarc配置的值(当前用户配置的.condarc与conda默认的.condarc配置合并后所有的.condarc配置项的值)conda info: 查看conda本身的相关信息,我们可以用这个查到conda实际默认使用的channel对应的URLs(即.condarc中的channels中指定的channel别名所对应的URLs)
我们再来看一下miniforge在没有在.condarc做任何配置时的各配置值:
channels:
- conda-forge
channel_alias: https://conda.anaconda.org
default_channels:
- https://repo.anaconda.com/pkgs/main
- https://repo.anaconda.com/pkgs/r
- https://repo.anaconda.com/pkgs/msys2
custom_channels:
pkgs/main: https://repo.anaconda.com
pkgs/r: https://repo.anaconda.com
pkgs/msys2: https://repo.anaconda.com
pkgs/pro: https://repo.anaconda.com
可以看出,miniforge的channels默认使用conda-forge。
而剩下的default_channels所定义的defaults这个channel根本没用到,如果想用,可以在.condarc中的channels中把defaults加上,或者在需要时手动引入,也就是上面所说的-c参数例如-c defaults或者-c pkgs/main等等。
这里需要说明一下
channel_alias的作用是指定channels中配置的别名如果在custom_channels不存在的话,就会默认用channel_alias中的地址。这里就是默认用https://conda.anaconda.org/conda-forge/这个地址。
而miniforge与anaconda/miniconda在channel上的默认行为,唯一的不同就是:miniforge会在你配置的channels最后默认加上conda-forge,而anaconda/miniconda会默认加defaults!
你需要哪些channel
现在,我们该回答如何正确选择channel的问题了。
先说结论,无论你用的是miniforge还是anaconda/miniconda(尽管并不推荐),一律建议使用conda-forge这个channel。
再细说一下这些channel都有什么区别,都在哪里维护。
- anaconda.org作为统一的前端页面,可用于搜索包、浏览channel、查看版本和下载量等。例如查看conda-forge、nvidia等channel的情况。
- anaconda商业官方包通过repo.anaconda.com(.com域名)分发,主要有pkgs/main、pkgs/r、pkgs/msys2等,更详细的说明(例如anaconda官方还维护哪些包、哪些废弃了等)见pkgs页面。
- 社区包通过conda.anaconda.org分发,例如conda-forge、nvidia等。
conda-forge目前最为活跃,anaconda商业官方包基本上就只有pkgs/main还在维护,而pkgs/r在2025年11月4日已经停止更新,pkgs/msys2也早在2016年就已经停止更新(pkgs/msys2还有个社区版channel,但跟anaconda商业版内容是一样的),其他的也废弃的废弃,停更的停更。
这些包基本上在conda-forge都有,所以只用conda-forge就好了。如果真的需要anaconda商业官方包,可以在channels中加上defaults,或者通过-c defaults或-c anaconda/pkgs/main手动指定channel。但一定不要在default_channels里混配anaconda/pkgs和conda-forge,或者是在channels中配多个且channel_priority配成disabled,否则包检索会按不同源内版本高的来而非在相同channel中寻找依赖包,这可能会导致依赖冲突问题。
配置conda镜像源
上面已经介绍了conda社区包和anaconda商业官方包的分发渠道:
- conda社区包:conda.anaconda.org,例如https://conda.anaconda.org/conda-forge/
- anaconda商业官方包:repo.anaconda.com,例如https://repo.anaconda.com/pkgs/main/
我们要做的,就是把这两个分发渠道替换成国内的镜像站。具体的地址每个镜像站可能有略微不同。以清华tuna镜像站为例,它们都被放到了https://mirrors.tuna.tsinghua.edu.cn/anaconda下:
- conda社区包:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud,都在cloud目录下
- anaconda商业官方包:https://mirrors.tuna.tsinghua.edu.cn/anaconda/,由于官方包都以pkgs开头,所以都在pkgs目录下。
因此典型的.condarc的default_channels和custom_channels镜像源配置如下(default_channels):
default_channels: # 没有别名也不会自动把别名添加到URL后面,所以直接写channel的具体地址
- 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: # 使用时自动把别名添加到URL后面,所以只需写channel源的URL前缀
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
配置python镜像源
上面说的都是conda源,但是python库有自己的源,也就是pip安装python包的pypi。
这个没什么乱七八糟特殊逻辑,直接配置就好。
- 通过命令配置:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple - 手动修改配置文件:修改
~/.config/pip/pip.conf或%APPDATA%\pip\pip.ini,写入如下配置
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
pytorch
先澄清一点,pytorch的名字就叫pytorch,但是它在pypi的名字叫torch(没有py前缀)。pytorch在conda的channel名,以及包名(包括pytorch和conda-forge这两个channel下的包)都叫pytorch。
pytorch主要有两种安装方式,分别是通过pip安装和通过conda安装。
通过pip安装
pytorch官网给了非常详细的安装指引,根据平台、CPU/GPU版本的不同,给了不同的pip安装命令。

例如:pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu130。其含义是以download.pytorch.org作为pip源进行安装。
需要使用pytorch自己的pip源安装的核心原因是,其在pypi同名同版本只能有一个包,这就导致只能发布CPU/GPU等多个版本中的一个。指定pip源的方式就可以解决这个问题,不同版本用不同的源地址即可。
但这样也有坏处,各个镜像站基本上都没有针对pytorch的pip源的镜像。
我们知道pypi一般是有镜像的,pytorch在pypi上的包也存在一些特殊处理:
- Linux: 包是GPU版本的pytorch,并且自带CUDA runtime。例如PyTorch 2.11用CUDA 13.0,PyTorch 2.10用CUDA 12.x。
- Windows: 包是CPU版本的pytorch,当然也不会有CUDA runtime。
通过pip安装的GPU版本的pytorch,CUDA runtime会安装在miniforge3\envs\${ENV}\Lib\site-packages\torch\lib。
GPU版本的pytorch安装完后会看到类似于
2.11.0+cu130的版本样式,尽管如此,也无法通过pip install torch==2.11.0+cu130这种方式通过pypi源安装,因为pypi源里就没有这种命名方式。
总结一下,如果是通过pip安装GPU版本的pytorch,Linux在pytorch官方源或pypi(含pypi镜像)均可,Windows只能通过pytorch官方源安装。
通过conda安装
先说最建议的方式,就是从conda-forge这个channel中安装。
执行conda install pytorch即可安装,会识别显卡驱动自动决定是否安装GPU版。
要确保是从conda-forge安装的pytorch,如果配置了其他channel,可以通过
conda install conda-forge::pytorch显式指定。
通过conda安装的GPU版本的pytorch,CUDA runtime会安装在miniforge3\envs\${ENV}\Library\bin。
如果想要强制指定安装GPU版本,可以安装conda-forge::pytorch-gpu,pytorch-gpu是个元包,作用就是强制安装pytorch的GPU版。
再说一个广为流传但已经过时的安装方式,conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia,我们对它拆解一下:
pytorch、torchvision、torchaudio、pytorch-cuda这几个包都是pytorch这个channel下的包,-c pytorch的作用就是在pytorch这个channel里找这些包pytorch-cuda这个包是个元包,其为nvidia这个channel里CUDA runtime的合集,所以需要-c nvidia才能找到这些CUDA runtime文件才能装这个包,pytorch-cuda=12.4就是在指定安装的CUDA runtime版本pytorch::pytorch只包含pytorch,conda install时带上-c nvidia就会安装GPU版本的pytorch,但是不带CUDA runtime,需要通过pytorch::pytorch-cuda包安装CUDA runtime,最终形成上面那个完整的一条命令
为什么说这个安装方式已经过时呢?因为conda的pytorch这个channel上的pytorch相关包早在24年10月底就不再更新(官方说明),只在conda-forge继续维护。最终版本锁定在了pytorch 2.5.1,python 3.12,cuda 12.4。不过这里说的是pytorch这个包,其他包可能仍在更新。
总结一下,如果是通过conda安装,直接从conda-forge安装pytorch包即可,会自动识别决定是否安装GPU版。不要安装pytorch这个channel里的任何包。
如何选择conda安装还是pip安装
conda-forge里的pytorch版本没有pytorch官网(自己的pip源)更新快。
因此,Linux系统上用哪个都可以;但Windows上考虑到是否有GPU版的镜像源的问题,优先考虑conda安装,如果对pytorch新版本有要求,就用pip走官方源安装。
无论选择哪种安装方式,都不需要去NVIDIA官网下载安装CUDA Toolkit和cuDNN!

Comments