很多刚开始接触深度学习的朋友,都会遇到同一个“入门第一课”——装 d2l 库。这个库是《动手学深度学习》一书的配套代码库,里面封装了课本里用到的数据集加载、模型训练、绘图工具等一系列函数,装好它基本就能跟着书里的代码一路跑下去。但问题恰恰出在安装这一步,尤其 Windows 用户,大概率会撞上一个 PermissionError: [WinError 5] 拒绝访问。我自己就踩过这个坑,而且翻了不少帖子才搞明白到底怎么回事。这篇东西把完整经验写出来,从环境准备、常规安装流程到权限错误的根源和多种解决方案,一步不落,照着操作基本能绕开所有雷区。
这个指南适合两类人:一类是刚装完 Anaconda、正准备装 d2l 的学习者,另一类是被 PermissionError 折磨了半天、已经想重装系统的倒霉蛋。我会先讲清楚安装前要做哪些准备工作,再给出一套可以“无脑复制”的安装流程,然后专门把 PermissionError 的来龙去脉拆开揉碎讲明白,最后附上完整的解决方案和常见问题速查表。
1. 安装前必须搞清楚的几件事
1.1 d2l 库到底是什么,为什么装它容易翻车
d2l 全称是 dive into deep learning,是《动手学深度学习》官方配套的 Python 工具库。它不是一个大型框架,更像一个“学习辅助工具箱”,主要做了三件事:封装数据集加载(比如 Fashion-MNIST、房屋价格预测数据集)、封装模型训练和评估的辅助函数、封装绘图和可视化工具。换句话说,框架本身是 PyTorch 或 TensorFlow 干的活,d2l 只是让你写代码时少重复造轮子。
它翻车的原因也跟这个定位有关——d2l 依赖的底层库比较多,安装时会顺带拉取 numpy、pandas、matplotlib、requests 等一堆包。如果本机环境里已经有旧版本的这些库,或者 Anaconda 安装时权限设置不规范,pip 在安装过程中就可能出问题,最常见的错误就是PermissionError: [WinError 5] 拒绝访问。很多新手看到这个错直接懵了,以为是自己操作不当,其实更多是 Windows 系统权限模型和 Anaconda 默认安装方式之间的冲突。
注意:d2l 本身是纯 Python 包,理论上装起来很轻量。真正的坑不在 d2l,而在你本机的 Python 环境和权限配置。
1.2 环境准备:Anaconda、虚拟环境和 Python 版本怎么选
安装 d2l 之前,先把环境梳理清楚。默认读者已经装好了 Anaconda,如果还没装,建议直接去清华大学开源软件镜像站下载最新版 Anaconda3,安装时有两个关键点:
第一,安装路径尽量不要带中文和空格,推荐直接装在某个盘的根目录下,比如D:\Anaconda3。路径里有中文会导致部分 Python 包编译失败,有空格会导致命令行工具解析异常,这些都是我用实际教训换来的经验。
第二,安装过程中会遇到“Add Anaconda3 to my PATH environment variable”的选项。新版安装器默认不勾选,这里建议不勾选,因为把 Anaconda 加进系统 PATH 会跟系统自带的 Python 产生冲突。我见过太多人勾了之后打开命令行就出现各种莫名其妙的报错,后面还得手动改环境变量才能恢复。
Python 版本方面,d2l 目前对 Python 3.8 到 3.11 都兼容良好,Anaconda 最新版自带的 Python 版本直接用就行。如果你打算用 GPU 版 PyTorch,要注意 PyTorch 对 Python 版本有明确要求,推荐在创建虚拟环境时使用 Python 3.9 或 3.10,这两个版本对 PyTorch 和 d2l 的兼容性最稳定。
最后是虚拟环境的建议——一定、一定、一定要为深度学习单独创建一个虚拟环境,不要直接用 base 环境。原因很简单:深度学习相关库的依赖更新很快,如果直接装在 base 环境,哪天你把某个库升级了,可能连带把 d2l 依赖的版本搞坏,然后整个环境都崩了。单独的环境隔离出去,随便折腾都不影响系统基础环境。
2. 常规安装流程:一步一步照着来
2.1 创建并激活 conda 虚拟环境
先从开始菜单找到“Anaconda Prompt”并打开。这里有一个细节:右键选择“以管理员身份运行”。虽然不是所有安装问题都能靠管理员权限解决,但至少能排除一部分权限相关的干扰,后面我们还会专门讨论这个操作到底有多大作用。我自己的习惯是一开始就管理员运行,避免不必要的麻烦。
接着创建一个独立环境,执行以下命令:
conda create -n d2l python=3.10 -y这行命令的意思是用 Python 3.10 版本创建一个名叫 d2l 的新环境。-y参数是跳过确认提示,直接安装。如果你电脑上已经装过 PyTorch 或其他深度学习框架,注意版本兼容性,建议 d2l 环境单独用,不要和已有环境混合使用。
创建完成后激活环境:
conda activate d2l激活成功后,命令行前面会显示(d2l)前缀。这一步没反应或者报错,通常是因为 Anaconda 安装时没有正确写入初始化配置,可以执行conda init cmd.exe修复,然后重启命令行再试。
2.2 用 pip 安装 d2l 的完整流程
环境激活后,第一件事是确认当前环境关联的 Python 和 pip 路径没问题:
where python where pip正常情况下,两个命令的结果都应该指向新创建的d2l环境目录,比如D:\Anaconda3\envs\d2l\python.exe。如果第一个结果出来的是系统自带的 Python 路径,说明环境没有激活成功,回去检查上一步。
接下来安装 d2l 之前,我建议先升级 pip,因为新版 pip 对包依赖解析更完善,安装时不容易出问题:
python -m pip install --upgrade pip然后正式安装 d2l:
pip install d2l就这么简单。正常情况下 pip 会自动拉取 d2l 及其所有依赖包。安装过程中会看到大量的下载进度条,这是正常的,说明依赖开始装上了。如果这里直接出现漫天的红色报错,画面定格在PermissionError: [WinError 5] 拒绝访问,恭喜你,踩到了微软系统上最经典的权限坑。先不要急着重装系统,往下看第 3 节。
安装完成后,用一段小代码验证是否真的可用:
import d2l print(d2l.__version__)如果能看到版本号输出,说明环境已经没问题了。如果弹出来ModuleNotFoundError: No module named 'd2l',大概率是当前命令行还在 base 环境,重新conda activate d2l后再试。
2.3 验证环境完整性的额外检查
只验证 d2l 能不能导入还不够,深度学习环境通常还需要确认 PyTorch 是否正常工作。d2l 在导入时并不会自动拉起 PyTorch,所以很多人在装完 d2l 后跑代码才发现 PyTorch 缺失。
先安装 PyTorch CPU 版:
pip install torch torchvision然后验证:
import torch print(torch.__version__) print(torch.cuda.is_available())这里建议先确认一下自己的显卡和 CUDA 环境,因为 PyTorch 的安装方式会直接影响后续能否用 GPU 训练。由于 d2l 的学习过程主要以 CPU 运行为主,前期不折腾 GPU 也没问题,先保证 CPU 版能跑通,后续有需要再单独装 CUDA 版就行。
提示:如果代码里经常用到 matplotlib 绘图,建议顺手把
matplotlib也确认一下,d2l 虽然会自动安装,但某些特殊版本的 matplotlib 在 Windows 上会出现中文字体显示问题,这个属于另一个坑了。
3. PermissionError 深度剖析:为什么会拒绝访问
3.1 错误信息的正确解读
当你看到PermissionError: [WinError 5] 拒绝访问。 error loading "D:\Users\ww117\anaco...这段报错时,先别慌,把这行字拆开看。
WinError 5是 Windows 系统级错误码,意思是“拒绝访问”,也就是当前进程没有权限去读取或修改某个文件、目录或注册表项。后半句error loading说明的是具体动作——加载某个文件失败。很多人第一次看到“拒绝访问”以为是网络问题或者代码问题,其实它压根跟网络没关系,是 Windows 的访问控制列表(ACL)机制在这个时刻起作用了。
3.2 根源分析:Windows 权限模型与符号链接问题
Windows 从 NTFS 文件系统开始就有一套严格的权限控制机制,每一个文件或目录都可以配置独立的访问控制列表,指定哪些用户或用户组能对该文件做什么操作。Anaconda 默认安装到系统盘用户目录下,比如C:\Users\用户名\anaconda3,有时候也会用管理员权限装到C:\ProgramData\Anaconda3,不同位置权限情况完全不同。
这里要解释一个关键环节——符号链接(symlink)问题。Windows 下创建符号链接默认需要管理员权限,普通用户运行 pip 时没有这个权限。在安装 d2l 这类包含大量依赖的库时,pip 会在 Python 的 site-packages 目录下创建一些链接文件,如果某一步操作因为权限问题失败,整个安装过程就中断了。这是新版 pip 在 Windows 上的通病。
热词里有用户在报错信息里出现“error loading 之后是乱码路径”,这个路径通常指向 Anaconda 目录下的 DLL 文件或依赖库。WinError 5 经常伴随这个提示,一般是当前用户对该目录缺少写权限,而 pip 需要在该目录下创建临时文件和缓存文件。这个问题在 conde 基座目录位于C:\ProgramData或者用户权限被修改过的系统里尤其严重。
3.3 为什么管理员身份不是万能药
很多教程会直接告诉你“用管理员身份运行 Anaconda Prompt”,我实测下来这个操作能解决部分问题,但绝对不是万能药。原因在于 Anaconda 安装完成后,它的目录权限并不是靠“管理员身份”就能完全覆盖的。
举个例子,如果 Anaconda 装在用户目录C:\Users\ww117\anaconda3,当前用户正常情况下对它拥有完全控制权,管理员身份反而可能触发用户账户控制(UAC)机制,让 pip 进程在高权限和低权限模式之间跳来跳去,偶尔还会出现“明明用了管理员却还是报错”的诡异情况。
更深层的原因是 Anaconda 目录层级复杂,里面很多子目录和文件的权限继承关系并不一致。管理员身份能提升进程权限,但 Windows 的权限控制还有一个基本原则:就算你是管理员,如果文件本身的 ACL 里显式拒绝了你,管理员也无法访问(除非先修改 ACL)。所以根本解决之道不是“以更高的权限去访问”,而是“把目录的权限配置调整正确”。
4. 完整的 PermissionError 解决方案
4.1 方案一:调整 Anaconda 目录权限(推荐)
这个方案是我折腾了多次之后最终采用的,也是解决 WinError 5 最直接的办法。核心思路是:把 Anaconda 所在目录的完全控制权授予当前用户,让 pip 在安装依赖时能自由读写。
首先找到 Anaconda 安装目录。如果你忘了装在哪里,打开 Anaconda Prompt,执行以下命令:
where conda它会显示 conda 的可执行文件路径,比如C:\Users\ww117\anaconda3\Scripts\conda.exe,那么 Anaconda 根目录就是C:\Users\ww117\anaconda3。
然后打开文件资源管理器,进入这个路径的上级目录,右键点击 anaconda3 文件夹,选择“属性”,切到“安全”选项卡,点击“编辑”按钮。在“组或用户名”列表里找到你的用户名(比如 ww117),在下方权限列表里勾选“完全控制”,点击“应用”再点“确定”。
Windows 会弹出一个提示:“正在设置安全信息”,需要等待它递归应用到所有子目录和文件。这一步可能会持续几分钟,尤其当 Anaconda 目录里已经装了大量包时,耐心等它跑完。
完成之后重新打开 Anaconda Prompt,激活环境,再次执行:
pip install d2l正常情况下,PermissionError 就不会再出现了。
4.2 方案二:更换安装方式与镜像源
如果方案一操作完还是报错,或者你压根不想动目录权限设置,可以尝试更换安装路径和源。
第一种做法是把虚拟环境建到用户目录之外的地方,比如直接建到D:\d2l_env:
conda create -p D:\d2l_env python=3.10 -y-p参数指定的是完整路径,而不是环境名,这样环境文件会存在D:\d2l_env下,避开了系统盘的权限约束。激活方式也稍微不同:
conda activate D:\d2l_env第二种做法是采用国内镜像源。清华源和阿里源都能有效解决部分超时报错,但注意 PermissionError 不是网络问题,换源本身并不直接解决权限问题,它解决的是下载超时导致的安装中断,间接避免了部分误报。如果你本身网络环境不太稳定,建议同时做:
pip install d2l -i https://pypi.tuna.tsinghua.edu.cn/simple这个命令告诉 pip 使用清华 PyPI 镜像下载包,下载速度会明显改善。但请记住,如果系统本身就提示 WinError 5,换源无法根治,只是能排除网络诱因,把权限问题暴露得更清楚。
4.3 方案三:重建用户级环境(干净彻底)
如果你不想动系统目录权限,又觉得建D:\d2l_env太麻烦,还有一个思路:用 pip 的--user参数安装到用户目录。
pip install --user d2l--user会把包安装到当前用户的 site-packages 目录下,通常是C:\Users\ww117\AppData\Roaming\Python\Python310\site-packages,这个位置天然对当前用户开放完全访问权,理论上不会出现权限问题。
但这里有个坑:d2l 的依赖包如果也用了--user安装,而 PyTorch 装在 Anaconda 环境里,两部分可能互相找不到。所以我更推荐的做法是:如果要用--user方案,干脆把 PyTorch 也用--user装一次,确保所有包都在同一个用户目录下。
实测下来,--user方案适合只想快速跑通课本代码、不追求环境整洁的读者。缺点是后续管理起来比较散乱,安装的包分布在不同目录下,卸载和升级都不太好操作。
5. 常见问题与排查技巧实录
5.1 经典报错速查表
安装 d2l 遇到的报错五花八门,但大部分都能归为几类,整理成表格方便对照:
| 报错类型 | 典型提示 | 根因 | 解决方案 |
|---|---|---|---|
| 权限报错 | PermissionError [WinError 5] 拒绝访问 | 目录 ACL 权限不足 | 调整 Anaconda 目录权限或改用--user安装 |
| 网络报错 | Timeout / Connection broken | 连接源站超时 | 换清华镜像源 |
| 找不到模块 | ModuleNotFoundError: No module named 'd2l' | 环境没激活或装错环境 | conda activate d2l后重试 |
| 版本冲突 | ImportError: cannot import name xxx | 某个依赖版本过旧/过新 | 升级或降级指定依赖 |
| 编码报错 | UnicodeDecodeError | Windows 默认编码问题 | 命令行执行chcp 65001后重试 |
5.2 子进程报错与安装中断的排查思路
热词里有“下载 d2l 时子进程报错”,这是安装依赖过程中很常见的一种现象。pip 在安装某个包时,会调用该包的 setup.py 执行构建,这个子进程如果因为权限或路径问题退出,pip 就会报出“Subprocess ... exited with error”一类提示。
具体排查思路分三步:先看报错前最后安装的是哪个包,这个包名会在报错日志上方显示;再单独安装这个包试试,比如报错指向的是 matplotlib,就单独执行pip install matplotlib看能否成功;最后如果单独装也报错,优先怀疑目录权限问题,直接按第 4 节的方案一处理。
5.3 命令行闪退与 conda init 问题
装完 Anaconda 之后打开命令行闪退,这个情况比 PermissionError 更折磨人。出现闪退通常因为 Anaconda 的初始化脚本在命令行启动时自动执行,但脚本路径有问题或者环境变量配置错误。
解决方法是重新初始化 Anaconda,打开一个新的命令提示符,执行:
conda init cmd.exe然后完全关闭命令行窗口再重新打开。
还有一个通用技巧:如果你的 Windows 系统自带 Python,并且已经加入 PATH,那么打开 Anaconda Prompt 后执行 python 时,可能跳到系统 Python 而不是 Anaconda 的 Python。解决办法是在 Anaconda Prompt 里执行:
where python如果第一个结果是系统 Python 的路径,就执行where python对比确认,然后用完整的 Anaconda Python 路径代替python命令来安装:
C:\Users\ww117\anaconda3\python.exe -m pip install d2l这样绕过系统 Python 对命令解析的干扰。
5.4 我踩过的三次坑汇总
最后分享一些操作层面的经验,这些细节教程里不会写,但每一个都可能让你多折腾一个小时。
第一次踩坑是直接在 base 环境装 d2l,装到一半提示 numpy 版本冲突,卸载 numpy 时又把 Anaconda 自带的 numpy 卸坏了,整个 base 环境的依赖全乱套。从那以后我建了独立环境,这个习惯让我后面少走了很多弯路。
第二次踩坑是用了管理员身份运行后仍然报 WinError 5,当时很崩溃。后来排查发现,Anaconda 目录虽然显示“完全控制给当前用户”,但实际子目录权限继承被关闭了,部分靠近底层的 site-packages 目录根本没有继承父目录的权限授权。解决办法是把父目录的权限重置成“继承”模式——如果方案一步骤执行完仍然报错,大概率就是权限继承没生效,需要重点检查 anaconda3 目录下Lib\site-packages的权限。
第三次踩坑是安装 d2l 后跑代码时提示缺少requests库。原因是 pip 安装时因为网络中断,依赖包没有装完整,但 d2l 本身已经装好了。这时候你重新执行pip install d2l它也不报错,因为 d2l 已经存在,pip 不会自动补齐缺失的依赖。解决办法是执行pip install requests手动补装,或者用pip install --force-reinstall d2l强制重装所有依赖。
提示:
pip check是一个很容易被忽略但很实用的命令,安装完任何包后执行一下,它会自动检测当前环境所有依赖是否完整,哪里有问题直接告诉你。
6. 附:一条命令完成全部安装(推荐收藏)
如果你嫌看这么多字太累,我给你一条化简到极致的“懒人安装路径”,在 Anaconda Prompt 里逐行执行:
conda create -n d2l python=3.10 -y conda activate d2l pip install torch torchvision pip install d2l -i https://pypi.tuna.tsinghua.edu.cn/simple python -c "import d2l; import torch; print('d2l', d2l.__version__, 'torch', torch.__version__)"前提是你已经按第 4.1 节的方法把 Anaconda 目录权限设置好了。如果最后一步正常输出版本号,直接打开 Jupyter 开始跟着课本跑代码吧。如果中间任何一步报错,回看对应的章节排查。
我个人在实际操作中最大的体会是:Windows 环境下很多 Python 库安装问题,本质上不是库的问题,而是系统权限配置和路径管理的问题。装 d2l 只是深度学习之路的第一道坎,把权限这个底层逻辑理解了,后面再装其他库再遇到类似报错,你至少知道往哪个方向排查,而不是一头扎进重装系统的不归路。