动手学深度学习(d2l)官方推荐用Python 3.9,因PyTorch 1.12.x、torchvision 0.13.0和d2l 0.17.6均明确要求该版本,选3.10或3.11易致import失败或CUDA不可用。

conda 创建虚拟环境时 Python 版本选哪个?
动手学深度学习(d2l)官方推荐用 python=3.9,不是最新版也不是最低兼容版,而是经过大量测试的稳定组合。PyTorch 1.12.x 系列对 3.9 支持最完整,torchvision==0.13.0、d2l==0.17.6 都明确要求该版本。选 3.10 或 3.11 可能导致 import d2l 报错或 torch.cuda.is_available() 返回 False —— 不是 CUDA 没装好,而是包依赖解析失败。
- 执行:
conda create -n d2l_py39 python=3.9 - 避免用
conda install python=3.9在已有环境中降级,容易破坏 base - 路径里别含中文或空格,比如
D:\envs\d2l_py39比C:\我的环境\d2l更可靠
为什么装完 PyTorch 还要在 Jupyter 里看不到这个环境?
因为 Jupyter 默认只认 base 环境,新创建的 d2l_py39 是“隐形”的——它没注册为 kernel。你得手动把它暴露给 Jupyter。
- 先激活:
conda activate d2l_py39 - 装内核支持:
pip install ipykernel(不用 conda install,避免混源冲突) - 注册内核:
python -m ipykernel install --user --name d2l_py39 --display-name "Python (d2l_py39)" - 验证:重启 Jupyter,新建 notebook 后右上角 Kernel → Change kernel → 能看到
Python (d2l_py39)
安装 PyTorch 时 cuda 版本填错会怎样?
torch.cuda.is_available() 返回 False 是最常见假阴性错误,90% 情况不是显卡驱动问题,而是 PyTorch 二进制包和本地 cudatoolkit 版本不匹配。比如你机器上 nvidia-smi 显示 CUDA Version: 12.1,但 PyTorch 官网下载的是 cudatoolkit=11.8 的包,就会静默失效。
- 查真实驱动支持:
nvidia-smi看右上角 “CUDA Version”(这是 driver 支持上限) - 选 PyTorch 包时,选 ≤ 该数字的版本,例如 driver 支持 12.1,就选
cu118或cu121,别选cu122 - 命令示例(Windows + cu118):
pip install torch==1.12.0+cu118 torchvision==0.13.0+cu118 torchaudio==0.12.0 -f https://download.pytorch.org/whl/torch_stable.html - 装完立刻测试:
import torch; print(torch.cuda.is_available()),别等跑模型才发现
d2l 库必须最后装,顺序不能乱
d2l 不是普通工具库,它硬编码依赖特定版本的 matplotlib、numpy 和 torch。如果你先 pip install d2l,再装 PyTorch,conda/pip 往往会降级或覆盖已有包,导致 d2l.plt 报 AttributeError 或绘图函数缺失。
- 正确顺序:
conda activate d2l_py39→ 装 PyTorch → 装ipykernel→ 注册 kernel → 最后pip install d2l==0.17.6 - 别用
pip install d2l(不带版本),默认装最新版,可能已弃用d2l.plot等旧接口 - 如果已装错,清干净重来:
conda deactivate && conda env remove -n d2l_py39 && conda create -n d2l_py39 python=3.9
conda list 看着都有,但 import torch 成功、torch.cuda.is_available() 失败;或者 kernel 列表里有名字,点进去却提示 ModuleNotFoundError: No module named 'torch'——那基本就是 kernel 注册时没在对应环境下执行,或者 ipykernel 装在了 base 里。


















