简介:这份资源面向深度学习入门者与Windows用户,聚焦《动手学深度学习》配套开发环境的手动搭建,帮助零基础读者解决Miniconda安装、虚拟环境创建、依赖包版本匹配等常见配置难题。资源包共1个文件,为PDF格式,大小约399KB,内容以图文步骤形式呈现,配有截图便于对照操作,涵盖镜像源加速、environment.yml依赖解析、gluon环境激活及mxnet、d2lzh、jupyter等库的逐一手动安装与排错思路。目前已有5143人学习下载,适合希望按部就班完成环境配置、避免版本冲突并顺利运行书中代码的读者参考,也可作为配置失败后的排查对照材料。
1. 从零搭一套能跑《动手深度学习》的环境,为什么我劝你别用 pip 硬扛
很多人第一次翻开《动手深度学习》这本书,卡住的地方不是反向传播,也不是卷积核怎么算,而是第 2 章还没读完,环境就先崩了。你照着书里的pip install d2l敲下去,装到一半报编译错误;换个思路装 PyTorch,又发现 CUDA 版本对不上;好不容易跑起来,Jupyter Notebook 里import torch直接给你一个红色 traceback。这不是你笨,是深度学习环境本身就是一堆版本敏感的东西叠在一起——Python 解释器、conda 包管理器、PyTorch、CUDA、cuDNN、Jupyter 内核,任何一层错位都会连锁翻车。
这篇笔记讲的就是一件事:用 Miniconda 从零手动搭一套能稳定跑《动手深度学习》的环境,不依赖任何一键脚本,每一步都能看到自己在干什么。适合两类人:一是刚买电脑准备入门深度学习、被各种教程绕晕的新手;二是装过几次环境但总在版本冲突里反复重装的老哥。我会把 conda 创建环境、PyTorch 安装、Jupyter 内核注册、路径配置这几件事拆开讲清楚,顺带把那些让人抓狂的报错——比如conda init没跑、Jupyter 权限拒绝、默认保存路径找不到——一个个摁死。全程手动,每一步都有据可查,装完你能自己判断哪里出了问题,而不是删了重来。
2. Miniconda 装完先别急着敲命令:环境隔离到底在隔离什么
2.1 conda、Miniconda、Anaconda 三者的关系与选型
先把概念理清楚,不然后面全是玄学。conda 是一个包管理和环境管理工具,它管的不只是 Python 包,还能管 Python 解释器本身、CUDA 运行时、甚至 C 编译器等非 Python 依赖。Anaconda 是 conda 加上一大堆预装科学计算包的发行版,体积动辄 3 到 5 GB;Miniconda 则是 conda 加一个精简的 Python,安装包几十 MB,装完干干净净,你要什么自己装。对《动手深度学习》这种需要精确控制 PyTorch 和 CUDA 版本的场景,Miniconda 是更合适的选择——预装包越少,版本冲突的面就越小。
环境隔离的本质,是给每个项目一套独立的site-packages目录和独立的 Python 解释器路径。你在 base 环境里装 PyTorch 2.x,在另一个环境里装 PyTorch 1.x,两者互不干扰。这就是为什么我强烈建议不要把所有东西都往 base 环境里塞——base 环境一旦被污染,修复成本比重新建一个环境高得多。
2.2 下载安装 Miniconda 与初始化 shell
去 Miniconda 官网下载对应系统的安装包。Windows 选.exe,macOS 和 Linux 选.sh。安装时有一个关键选项:Windows 上会问你是否把 conda 加入 PATH,我一般勾上,省得后面手动配。macOS 和 Linux 用命令行安装:
# 下载后赋予执行权限并安装到指定目录 bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3 # 安装完成后初始化 shell,让 conda 命令生效 $HOME/miniconda3/bin/conda init bash # 重新加载 shell 配置,使 init 生效 source ~/.bashrc-b表示批处理模式不交互,-p指定安装路径。conda init这一步非常关键,它会把 conda 的初始化脚本写进你的 shell 配置文件(.bashrc、.zshrc或 Windows 的 PowerShell profile)。很多人装完 conda 发现终端里敲conda提示找不到命令,或者激活环境时报condaerror: run 'conda init' before 'conda activate',根因就是这一步没做或者做完没重新加载 shell。Windows 用户在 PowerShell 里执行conda init powershell,然后关掉终端重开。
提示:如果你用的是 zsh,把上面的
bash换成zsh;Windows 的 cmd 不支持 conda activate,建议统一用 PowerShell 或 Anaconda Prompt。
2.3 配置国内镜像源,把下载速度拉回可用区间
默认的 conda 源在国内下载速度经常让人怀疑人生。配置清华源是常规操作:
# 添加清华 conda 镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 显示 channel 地址,方便确认配置生效 conda config --set show_channel_urls yes # 查看当前配置 conda config --show channels--add channels把镜像源加到 channel 列表顶部,conda 会优先从这里找包。show_channel_urls yes让你在安装时能看到包具体从哪个源下载,排查问题时有用。pip 也建议单独配一份镜像,因为有些包 conda 源里没有,得走 pip:
# 配置 pip 清华镜像 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple注意 conda 和 pip 的镜像配置是两套独立系统,别混。conda 装不了的包再用 pip 装,顺序反了容易出问题——pip 装的包 conda 不认,后续 conda 更新时可能覆盖掉。
3. 创建 d2l 专用环境并装对 PyTorch:版本对齐是唯一的硬道理
3.1 用 conda 创建指定 Python 版本的环境
《动手深度学习》的代码对 Python 版本有要求,太新或太旧都可能出问题。目前比较稳的选择是 Python 3.9 或 3.10。创建环境:
# 创建名为 d2l 的环境,指定 Python 3.9 conda create -n d2l python=3.9 -y # 激活环境 conda activate d2l # 确认当前 Python 路径来自 d2l 环境 which python # Linux/macOS where python # Windows-n d2l是环境名,你可以改成任何名字,但后面所有命令都要对应改。-y自动确认,省去交互。激活后终端提示符前面会出现(d2l),这是最直观的确认信号。如果conda activate报错说没初始化,回到 2.2 节补conda init。which python的输出应该指向miniconda3/envs/d2l/bin/python,如果还指向系统 Python,说明激活没成功。
3.2 PyTorch 与 CUDA 版本怎么对齐
这是整个配置里最容易翻车的一步。PyTorch 官网的安装命令选择器会根据你的 CUDA 版本生成对应的命令,但前提是你得知道自己显卡驱动支持的最高 CUDA 版本。用nvidia-smi查看:
# 查看显卡驱动和支持的 CUDA 版本 nvidia-smi输出右上角的CUDA Version是驱动支持的最高版本,不是你已安装的版本。比如显示 12.1,你可以装 CUDA 11.8 或 12.1 对应的 PyTorch,但不能装 12.4 的。没有 NVIDIA 显卡的,直接装 CPU 版本,别折腾 CUDA。
# 示例:安装 CUDA 11.8 对应的 PyTorch(具体命令以官网选择器为准) conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia # CPU 版本 conda install pytorch torchvision torchaudio cpuonly -c pytorchpytorch-cuda=11.8这个参数告诉 conda 装对应 CUDA 版本的 PyTorch 构建。-c pytorch -c nvidia指定从官方 channel 找包。装完后验证:
import torch # 检查 PyTorch 版本 print(torch.__version__) # 检查 CUDA 是否可用 print(torch.cuda.is_available()) # 查看可用的 GPU 数量 print(torch.cuda.device_count())torch.cuda.is_available()返回False是最常见的翻车点。原因通常有三个:装的是 CPU 版本、CUDA 版本和驱动不匹配、或者 conda 环境里混入了 pip 装的 PyTorch 导致冲突。排查顺序是先conda list | grep torch看装了什么版本,再确认驱动版本,最后检查是不是 pip 和 conda 混装。
3.3 安装 d2l 包并跑通第一个例子
《动手深度学习》配套的d2l包可以直接用 pip 装:
# 在 d2l 环境中安装 d2l 包 pip install d2l==1.0.3版本号建议和书对应的版本一致,不同版本的 API 可能有差异。装完后跑一个最小验证:
# 导入 d2l 和 torch,确认环境可用 import torch from d2l import torch as d2l # 创建一个张量并做简单运算 x = torch.arange(12, dtype=torch.float32).reshape(3, 4) print(x) print(x.sum())如果这段代码能正常输出,说明 PyTorch 和 d2l 都装好了。报ModuleNotFoundError说明包没装进当前环境,检查pip是不是指向了 d2l 环境的 pip——用which pip确认。报 CUDA 相关错误但torch.cuda.is_available()是True,多半是 CUDA 运行时库路径问题,重装 PyTorch 时确保pytorch-cuda参数和驱动匹配。
4. 把 Jupyter Notebook 接进 d2l 环境:内核注册与路径设置
4.1 安装 Jupyter 并注册 conda 环境为内核
Jupyter Notebook 是《动手深度学习》的主要交互方式,但默认情况下它用的是 base 环境的 Python,不会自动识别你新建的 d2l 环境。需要手动注册内核:
# 在 d2l 环境中安装 ipykernel conda install ipykernel -y # 把 d2l 环境注册为 Jupyter 内核 python -m ipykernel install --user --name=d2l --display-name="Python (d2l)"--name=d2l是内核的内部标识,--display-name是你在 Jupyter 界面里看到的名字。注册完成后启动 Jupyter:
# 启动 Jupyter Notebook jupyter notebook浏览器打开后,新建 notebook 时在 Kernel 菜单里选Python (d2l)。如果列表里没有,执行jupyter kernelspec list查看已注册的内核,确认 d2l 在列。不在的话重新执行注册命令,注意要在 d2l 环境激活状态下执行。
4.2 修改 Jupyter 默认保存路径
Jupyter 默认把 notebook 存在用户主目录下,时间长了文件散得到处都是。改默认路径:
# 生成 Jupyter 配置文件 jupyter notebook --generate-config # 配置文件通常位于 ~/.jupyter/jupyter_notebook_config.py打开配置文件,找到c.NotebookApp.notebook_dir这一行,取消注释并改成你想要的路径:
# 设置 Jupyter 启动时的默认目录 c.NotebookApp.notebook_dir = '/home/yourname/d2l-notes'Windows 用户注意路径用正斜杠或双反斜杠。改完后重启 Jupyter。如果发现改了没生效,检查是不是从快捷方式启动的——Windows 快捷方式有自己的工作目录设置,会覆盖配置文件。直接命令行启动最稳。
4.3 解决 Jupyter 权限拒绝与端口占用
jupyter permissionerror:[errno 13] permission denied这个报错通常出现在两种场景:一是配置文件或运行时目录权限不对,二是 notebook 试图写入没有权限的目录。排查:
# 检查 Jupyter 运行时目录权限 ls -la ~/.local/share/jupyter/ # 修复权限(Linux/macOS) chmod -R u+rw ~/.local/share/jupyter/端口占用则是另一个常见问题。Jupyter 默认用 8888 端口,被占了会报Address already in use。指定其他端口:
# 指定端口启动 jupyter notebook --port=8889 # 或者查看谁占了 8888 端口 lsof -i :8888 # Linux/macOS netstat -ano | findstr :8888 # Windows注意:如果你在服务器上跑 Jupyter,需要加
--ip=0.0.0.0才能从其他机器访问,同时注意防火墙设置。本地使用不需要这个参数。
5. 环境配置避坑清单:这五个坑我替你踩过了
5.1 坑一:conda activate 报错说没初始化
现象:装完 Miniconda,终端里敲conda activate d2l,提示condaerror: run 'conda init' before 'conda activate'。
原因:conda 的 shell 初始化脚本没有写入你的 shell 配置文件,或者写入了但当前 shell 会话没有重新加载。
解决:执行conda init bash(或zsh、powershell),然后关闭终端重新打开,或者source ~/.bashrc。Windows 上用 PowerShell 执行conda init powershell,然后重开 PowerShell 窗口。如果还不行,检查.bashrc里有没有 conda 的初始化块,没有的话手动加。
5.2 坑二:PyTorch 装完 cuda.is_available() 返回 False
现象:明明装了 GPU 版本的 PyTorch,torch.cuda.is_available()就是False。
原因:三种可能——装成了 CPU 版本、CUDA 版本和显卡驱动不匹配、conda 和 pip 混装导致版本冲突。
解决:先conda list | grep torch确认装的版本带不带cuda字样。不带就是装错了,卸载重装。带的话用nvidia-smi看驱动支持的 CUDA 版本,和 PyTorch 编译时的 CUDA 版本对比。混装问题最隐蔽,建议conda remove pytorch torchvision torchaudio彻底卸载后只用 conda 重装一次,不要 pip 和 conda 交替装同一个包。
5.3 坑三:Jupyter 里 import torch 成功但 import d2l 失败
现象:notebook 里import torch没问题,from d2l import torch as d2l报ModuleNotFoundError。
原因:Jupyter 内核指向的不是 d2l 环境,而是 base 环境或其他环境。d2l 包装在了 d2l 环境里,但内核用的是别的环境的 Python。
解决:在 notebook 里执行import sys; print(sys.executable)看当前内核用的 Python 路径。如果不是miniconda3/envs/d2l/bin/python,说明内核选错了。在 Kernel 菜单里切换内核,或者重新注册内核(参考 4.1 节)。注册完记得刷新浏览器页面。
5.4 坑四:conda 装包卡在 Solving environment
现象:执行conda install后卡在Solving environment几分钟甚至十几分钟不动。
原因:conda 的依赖求解器在包数量多、channel 多的时候会非常慢,这是 conda 的老毛病。
解决:优先用conda install装核心包(PyTorch、CUDA 相关),其他包用 pip 装。pip 的依赖求解快得多。另外可以装mamba替代 conda 的求解器:conda install -n base mamba -c conda-forge,之后用mamba install代替conda install,速度提升明显。channel 也不要加太多,清华源加官方源就够了。
5.5 坑五:改了 Jupyter 默认路径但不生效
现象:配置文件里改了notebook_dir,重启 Jupyter 后默认路径还是老样子。
原因:Windows 上从开始菜单快捷方式启动 Jupyter 时,快捷方式属性里的「起始位置」会覆盖配置文件。另外配置文件里可能有多个notebook_dir相关设置,改错了行。
解决:不用快捷方式,直接从命令行启动jupyter notebook。如果必须用快捷方式,右键属性,把「起始位置」改成目标目录,并删掉目标路径末尾的%USERPROFILE%。配置文件里确认改的是c.NotebookApp.notebook_dir而不是c.ServerApp.root_dir(新版 Jupyter 可能用后者)。
6. 验证环境是否真的可用:三个递进测试与一个长期习惯
环境装完不代表能用,得跑测试。我一般分三层验证,从轻到重。
第一层,纯 Python 和 PyTorch 基础运算:
import torch # 创建张量并做矩阵乘法,验证基础运算 a = torch.randn(3, 3) b = torch.randn(3, 3) c = a @ b print(c.shape) # 应为 torch.Size([3, 3]) # 如果有 GPU,把张量移到 GPU 上验证 if torch.cuda.is_available(): a_gpu = a.to('cuda') b_gpu = b.to('cuda') c_gpu = a_gpu @ b_gpu print(c_gpu.device) # 应为 cuda:0第二层,d2l 包的功能验证:
from d2l import torch as d2l import torch # 用 d2l 的计时器测试 timer = d2l.Timer() timer.start() x = torch.randn(1000, 1000) y = torch.mm(x, x) timer.stop() print(f'矩阵乘法耗时: {timer.sum():.4f} 秒')第三层,跑一个《动手深度学习》书里的实际例子,比如线性回归的简洁实现。能跑通说明环境完全就绪。
| 测试层级 | 验证内容 | 通过标准 |
|---|---|---|
| 第一层 | PyTorch 张量运算与 GPU 可用性 | 输出 shape 正确,GPU 设备显示 cuda:0 |
| 第二层 | d2l 包导入与工具函数 | Timer 正常计时,无导入错误 |
| 第三层 | 书内完整模型训练 | 损失下降,无运行时错误 |
长期习惯方面,我自己的做法是每个项目建一个独立 conda 环境,环境名和项目名对应,用conda env export > environment.yml导出依赖清单。这样换机器或者重装时,conda env create -f environment.yml就能复现。另外,base 环境永远只装 conda 本身和 mamba,不装任何项目依赖——这是血泪教训,base 污染过一次之后,修复的时间够你重装三遍系统。还有个小技巧:把conda activate d2l写成 shell 别名或者项目目录下的.envrc,每次进项目目录自动激活,省得忘了切环境跑错代码。
环境配置这件事,第一次装花两小时,第二次装花二十分钟,第三次开始就是肌肉记忆。真正值得投入的不是装的过程,而是理解每一步在干什么——这样下次报错时你能自己定位,而不是到处搜教程碰运气。希望帮到你。
本文还有配套的精品资源,点击获取