04月15, 2026

关于python与pytorch的各种配置问题与迷思

最近开始深度搞搞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-forgenvidia也有自己维护的channel。不同的channel提供了不同的软件集合(当然不同的channel里也可能有相同的软件)。相当于把软件包套了层namespace,不同组织各自维护自己的channel(当然一个组织也可能维护多个channel)。

接下来看channelsdefault_channelscustom_channels这三个channel相关的配置是在配什么:

  • channels: 指定使用conda createconda 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里的软件。手动指定有两个方法:

  1. 通过-c参数,例如conda install pytorch -c conda-forge(本次conda install操作增加对conda-forge这个channel里软件的检索)
  2. 在包名前手动指定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都有什么区别,都在哪里维护。

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商业官方包的分发渠道:

我们要做的,就是把这两个分发渠道替换成国内的镜像站。具体的地址每个镜像站可能有略微不同。以清华tuna镜像站为例,它们都被放到了https://mirrors.tuna.tsinghua.edu.cn/anaconda下:

因此典型的.condarcdefault_channelscustom_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安装命令。

image.png

例如: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-gpupytorch-gpu是个元包,作用就是强制安装pytorch的GPU版。

再说一个广为流传但已经过时的安装方式conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia,我们对它拆解一下:

  • pytorchtorchvisiontorchaudiopytorch-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 ToolkitcuDNN

本文链接:https://debug.fanzheng.org/post/myth-of-python-and-pytorch.html

-- EOF --

Comments