Windows下Conda无法创建Python 3.11虚拟环境:从镜像源404到PackagesNotFoundError的完整排查与解决

1. 问题背景

最近在一台 Windows 电脑上配置 PyTorch GPU 环境,希望单独创建一个 Python 3.11 的 Conda 虚拟环境,用于后续安装 PyTorch、CUDA 相关依赖。

本机已有 Anaconda,base 环境中的 Python 版本为:

text 复制代码
Python 3.13.9

计划创建一个新的虚拟环境:

text 复制代码
pytorchgpu

并指定:

text 复制代码
Python 3.11

正常情况下,只需要执行:

powershell 复制代码
conda create -n pytorchgpu python=3.11

但实际配置过程中却连续遇到了两个问题:

  1. Conda 镜像源返回 HTTP 404;
  2. 即使切换到官方源,Conda 仍然提示 python=3.11 不存在。

更奇怪的是:

conda search 明明可以搜索到 Python 3.11,但 conda create 却始终提示 PackagesNotFoundError

最终经过逐层排查,发现问题并不在 Python 3.11,也不在 conda-forge,而是主要集中在 Conda 默认求解器的求解过程

本文记录完整排查过程。


2. 第一个问题:阿里云 Conda 镜像源失效

最开始执行:

powershell 复制代码
conda create -n pytorchgpu python=3.11

出现:

text 复制代码
UnavailableInvalidChannel: HTTP 404 Not Found for channel conda-forge

https://mirrors.aliyun.com/anaconda/cloud/conda-forge

Conda 当前配置大致如下:

yaml 复制代码
channels:
  - conda-forge
  - pytorch

show_channel_urls: true

default_channels:
  - https://mirrors.aliyun.com/anaconda/pkgs/main
  - https://mirrors.aliyun.com/anaconda/pkgs/r
  - https://mirrors.aliyun.com/anaconda/pkgs/msys2

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

channel_priority: flexible

从报错可以看出,Conda 实际尝试访问:

text 复制代码
https://mirrors.aliyun.com/anaconda/cloud/conda-forge

但该地址返回:

text 复制代码
HTTP 404

因此第一层问题很明确:

当前 .condarc 中配置的阿里云 conda-forge 镜像地址已经无法正常使用。


3. 尝试绕过镜像源

为了避免原有 .condarc 干扰,可以临时指定官方源,并加:

text 复制代码
--override-channels

例如使用 Anaconda 官方 main:

powershell 复制代码
conda create -n pytorchgpu python=3.11 ^
-c https://repo.anaconda.com/pkgs/main ^
--override-channels

PowerShell 中实际可直接写为一行:

powershell 复制代码
conda create -n pytorchgpu python=3.11 -c https://repo.anaconda.com/pkgs/main --override-channels

结果虽然已经能够正常下载:

text 复制代码
Collecting package metadata (repodata.json): done

但随后却出现:

text 复制代码
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - python=3.11

这就比较奇怪了。

因为 Python 3.11 显然不可能已经从官方仓库中完全消失。


4. 换成官方 conda-forge,仍然失败

进一步完全绕开阿里云镜像,直接使用官方 conda-forge:

powershell 复制代码
conda create -n pytorchgpu python=3.11 -c https://conda.anaconda.org/conda-forge --override-channels

结果仍然是:

text 复制代码
Collecting package metadata (repodata.json): done
Solving environment: failed

PackagesNotFoundError:

  - python=3.11

到这里基本可以排除一个简单结论:

问题已经不只是"阿里云镜像失效"。

因为此时已经直接访问官方 conda-forge。


5. 最关键的一步:先不要创建环境,直接搜索 Python 3.11

这个排查思路非常重要。

conda create 同时涉及:

  1. 仓库索引读取;
  2. 包版本查询;
  3. 依赖求解;
  4. 环境创建。

因此如果直接运行 conda create,很难确定究竟是哪一层出了问题。

于是改用:

powershell 复制代码
conda search "python=3.11" -c https://conda.anaconda.org/conda-forge --override-channels --repodata-fn repodata.json --no-repodata-use-zst

结果成功列出了大量 Python 3.11 版本:

text 复制代码
python  3.11.0
python  3.11.1
python  3.11.2
python  3.11.3
...
python  3.11.14
python  3.11.15
python  3.11.16

例如:

text 复制代码
python  3.11.16  hb12b558_0_cpython  conda-forge

这一步极其关键。

它说明:

text 复制代码
conda-forge 官方源正常
        ↓
Windows win-64 包正常
        ↓
Python 3.11 包真实存在
        ↓
本机网络正常
        ↓
Conda 能够读取仓库索引

换句话说:

PackagesNotFoundError 并不是真的意味着仓库里不存在 Python 3.11。

问题应该发生在:

text 复制代码
Solving environment

这一阶段。


6. 尝试固定 Python 3.11.16,依然失败

既然搜索结果已经明确显示:

text 复制代码
Python 3.11.16

存在,那么进一步指定准确版本:

powershell 复制代码
conda create -n pytorchgpu python=3.11.16 -c https://conda.anaconda.org/conda-forge --override-channels --repodata-fn repodata.json --no-repodata-use-zst

结果仍然:

text 复制代码
Solving environment: failed

PackagesNotFoundError:

  - python=3.11.16

此时问题就更加明确了:

text 复制代码
conda search
→ 能看到 Python 3.11.16

conda create
→ 却说 Python 3.11.16 不存在

因此已经基本可以判断:

问题发生在 Conda 创建环境时的依赖求解阶段,而不是包本身不存在。


7. 排查是否存在隐藏的 Conda 限制

在怀疑 solver 之前,还可以检查几个 Conda 配置。

7.1 检查是否只允许旧 .tar.bz2

执行:

powershell 复制代码
conda config --show use_only_tar_bz2

结果:

text 复制代码
use_only_tar_bz2: None

说明没有显式限制 Conda 只能安装旧格式包。


7.2 检查是否锁定了 Python 版本

执行:

powershell 复制代码
conda config --show pinned_packages

结果:

text 复制代码
pinned_packages: []

说明没有类似:

text 复制代码
python=3.13

这样的全局版本锁定。


7.3 检查创建环境时是否自动加入额外软件包

执行:

powershell 复制代码
conda config --show create_default_packages

结果:

text 复制代码
create_default_packages: []

说明 Conda 在创建新环境时没有自动加入其他默认包。

因此以下三个常见原因均被排除:

text 复制代码
use_only_tar_bz2       → 无异常
pinned_packages        → 空
create_default_packages → 空

问题进一步集中到:

Conda solver。


8. 最终解决方案:切换为 classic solver

最终执行:

powershell 复制代码
conda create -n pytorchgpu python=3.11.16 -c https://conda.anaconda.org/conda-forge --override-channels --solver=classic --repodata-fn repodata.json --no-repodata-use-zst --no-pin --no-default-packages

其中最关键的是:

text 复制代码
--solver=classic

另外几个参数分别用于最大限度减少其他配置干扰:

text 复制代码
--override-channels

只使用本次指定的 channel。

text 复制代码
--repodata-fn repodata.json

明确使用完整 repodata。

text 复制代码
--no-repodata-use-zst

不使用 zstd 压缩版 repodata。

text 复制代码
--no-pin

忽略潜在版本 pin。

text 复制代码
--no-default-packages

不自动加入默认包。

这一次结果终于变为:

text 复制代码
Collecting package metadata (repodata.json): done
Solving environment: done

然后正常生成:

text 复制代码
## Package Plan ##

environment location:

C:\Users\小乔\.conda\envs\pytorchgpu

added / updated specs:

  - python=3.11.16

并列出了待安装的软件包:

text 复制代码
python-3.11.16
pip
setuptools
openssl
tk
wheel
...

最终显示:

text 复制代码
done

# To activate this environment, use
#
#     conda activate pytorchgpu

至此,环境终于创建成功。


9. 为什么 --solver=classic 能解决问题?

Conda 新版本通常会使用较新的依赖求解机制。

而本次实际测试中出现了一个非常典型的现象:

text 复制代码
默认 solver
        ↓
Python 3.11.16
        ↓
PackagesNotFoundError

切换:

text 复制代码
--solver=classic

之后:

text 复制代码
Solving environment: done

因此从本次排查结果来看:

问题高度集中在默认 solver 的求解路径,而不是 Python 3.11 本身。

需要注意的是,这并不意味着:

所有 Conda 用户都应该永久改成 classic。

而是说:

当出现"conda search 能找到包,而 conda create 却报 PackagesNotFoundError"这种反常情况时,切换 solver 是一个非常值得尝试的排错手段。


10. 推荐的简化解决命令

如果确定自己的问题与本文类似,可以先尝试:

powershell 复制代码
conda create -n pytorchgpu python=3.11 --solver=classic

如果原有 Conda channel 配置存在问题,则建议进一步指定官方 conda-forge:

powershell 复制代码
conda create -n pytorchgpu python=3.11 -c https://conda.anaconda.org/conda-forge --override-channels --solver=classic

如果仍然存在 repodata 或其他配置干扰,可以使用完整版:

powershell 复制代码
conda create -n pytorchgpu python=3.11.16 -c https://conda.anaconda.org/conda-forge --override-channels --solver=classic --repodata-fn repodata.json --no-repodata-use-zst --no-pin --no-default-packages

11. 如何确认环境确实创建成功

创建完成后执行:

powershell 复制代码
conda activate pytorchgpu

然后:

powershell 复制代码
python --version

正常应看到:

text 复制代码
Python 3.11.16

还可以执行:

powershell 复制代码
where.exe python

正常情况下,虚拟环境中的 Python 应该位于类似:

text 复制代码
C:\Users\用户名\.conda\envs\pytorchgpu\python.exe

12. 一个很重要的排错思路:不要看到 PackagesNotFoundError 就立即换源

这次排查过程中最大的经验之一就是:

PackagesNotFoundError 并不一定意味着这个包真的不存在。

例如本次:

text 复制代码
conda create python=3.11.16

提示:

text 复制代码
PackagesNotFoundError

但:

powershell 复制代码
conda search "python=3.11"

却可以明确看到:

text 复制代码
3.11.16

因此以后遇到类似问题,可以按照下面的顺序排查:

text 复制代码
第一步
检查 channel 是否可以访问
        ↓
第二步
conda search 包名
        ↓
第三步
确认仓库里是否真实存在该包
        ↓
第四步
检查 pinned_packages 等配置
        ↓
第五步
切换 solver
        ↓
第六步
再考虑重装 Conda

而不是一看到:

text 复制代码
PackagesNotFoundError

就开始:

text 复制代码
换镜像
重装 Python
重装 Anaconda
重装 CUDA

很多时候这些操作其实和真正的问题没有关系。


13. 建议检查自己的 .condarc

如果之前使用过国内镜像,建议执行:

powershell 复制代码
conda config --show-sources

查看 Conda 到底读取了哪些配置文件。

然后:

powershell 复制代码
conda config --show channels

以及:

powershell 复制代码
conda config --show

检查是否还存在已经失效的:

text 复制代码
custom_channels

例如本文最开始遇到的:

yaml 复制代码
custom_channels:
  conda-forge: https://mirrors.aliyun.com/anaconda/cloud

如果该镜像已经无法访问,那么即使其他配置没有问题,也会导致:

text 复制代码
HTTP 404

因此需要把:

"镜像源问题"

和:

"solver 问题"

分开处理。

本文实际上同时遇到了这两层问题。


14. 本次问题的完整故障链

整个过程可以总结为:

text 复制代码
conda create python=3.11
        ↓
阿里云 conda-forge
        ↓
HTTP 404
        ↓
发现镜像源失效
        ↓
切换 Anaconda 官方源
        ↓
PackagesNotFoundError
        ↓
切换官方 conda-forge
        ↓
仍然 PackagesNotFoundError
        ↓
conda search python=3.11
        ↓
成功找到 Python 3.11.0~3.11.16
        ↓
证明包确实存在
        ↓
检查 pinned/default packages 等配置
        ↓
均无异常
        ↓
切换 --solver=classic
        ↓
Solving environment: done
        ↓
Python 3.11.16 环境创建成功

所以最终问题并不是单一原因,而是:

第一层:旧 Conda 镜像配置失效;

以及:

第二层:默认 solver 在当前环境中出现异常求解行为。


15. 总结

如果你在 Windows 下执行:

powershell 复制代码
conda create -n xxx python=3.11

遇到:

text 复制代码
PackagesNotFoundError

不要立即认为:

Python 3.11 不支持了。

尤其是当:

powershell 复制代码
conda search "python=3.11"

能够正常找到目标版本时,就应该把排查重点放到:

text 复制代码
Conda channel
Conda 配置
repodata
solver

而不是 Python 本身。

本次最终成功命令为:

powershell 复制代码
conda create -n pytorchgpu python=3.11.16 -c https://conda.anaconda.org/conda-forge --override-channels --solver=classic --repodata-fn repodata.json --no-repodata-use-zst --no-pin --no-default-packages

成功标志:

text 复制代码
Solving environment: done

以及:

text 复制代码
python 3.11.16

至此,Python 3.11 虚拟环境创建完成。

下一步便可以继续安装 PyTorch GPU 环境。


附:本文常用排查命令汇总

查看 Conda 版本:

powershell 复制代码
conda --version

查看 Conda 配置来源:

powershell 复制代码
conda config --show-sources

查看 channels:

powershell 复制代码
conda config --show channels

搜索 Python 3.11:

powershell 复制代码
conda search "python=3.11" -c https://conda.anaconda.org/conda-forge --override-channels

检查包格式限制:

powershell 复制代码
conda config --show use_only_tar_bz2

检查版本锁定:

powershell 复制代码
conda config --show pinned_packages

检查默认附加包:

powershell 复制代码
conda config --show create_default_packages

使用 classic solver 创建环境:

powershell 复制代码
conda create -n pytorchgpu python=3.11 --solver=classic

确认 Python 版本:

powershell 复制代码
python --version

确认 Python 实际路径:

powershell 复制代码
where.exe python
相关推荐
sukalot1 小时前
windows 驱动实例分析系列: wireguard-nt驱动分析-api篇(二)
windows
MNLoser2 小时前
AI agent开发——LangGraph接入持久化
linux·人工智能·windows·python
小桥流水---人工智能2 小时前
Windows下RTX 5070安装PyTorch GPU完整教程:Python 3.11 + PyTorch 2.8.0 + CUDA 12.9
pytorch·windows·python3.11
爱学习的小白柏14 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
何以解忧,唯有..17 小时前
Python 中获取目录操作完全指南
windows·python·microsoft
YCOSA202520 小时前
雨晨 Windows 10 轻装版 64位 六合一 VIP 19045.7663
windows·物联网
DOLA_Tech1 天前
电脑共享文件夹教程(Windows、统信UOS、银河麒麟)
windows·电脑
淡海水1 天前
03-03-线性-LinkedList-T-源码不变式与选择边界
windows·链表·c#·编译·linkedlist·clr·机器码
钝挫力PROGRAMER1 天前
Windows Docker 环境搭建 GitLab CI/CD 流水线
windows·docker·gitlab·gitlab-runner