news 2026/10/2 7:36:26

Windows下Anaconda安装d2l库PermissionError完整解决指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows下Anaconda安装d2l库PermissionError完整解决指南

先说结论:在Windows上用Anaconda安装d2l库,90%的坑都集中在两个地方:依赖链太长,以及pip子进程权限不足。尤其是标题里那个PermissionError: [WinError 5] 拒绝访问。error loading "D:\Users\ww117\Anaconda...",几乎每个在Windows下装d2l的人都会撞上一次,这个报错看起来吓人,但本质上不是d2l这个包本身有问题,而是安装器的执行权限和路径策略出了问题。

d2l是《动手学深度学习》这本书配套的Python工具库,它封装了数据加载、模型训练、绘图等一堆常用函数,目的是让人把精力放在理解深度学习原理上,而不是每次写代码都重复造轮子。它支持PyTorch、TensorFlow、MXNet三种后端,默认安装时可能会给你拉一堆依赖。很多初学者跟着教程走,在Windows命令行里输pip install d2l,结果跑了一半直接红字报错,心态当场崩掉。这篇文章就是把我在Windows 10/11下装d2l的整个流程、踩坑点、以及PermissionError的完整解决方案写清楚,适合刚学深度学习的本科生、转行做算法的朋友,以及任何在Windows上用Anaconda管理Python环境的人参考。

1. 先说清楚 d2l 是什么,为什么在 Windows 上装它比想象中更折腾

1.1 d2l 库解决什么问题

《动手学深度学习》这本书早期版本用的是MXNet作为默认后端,后来社区主力转向了PyTorch。d2l库本身是一个轻量级的教学辅助包,里面包括了几个核心模块:

  • d2l.data:封装了常见数据集的下载和预处理,比如Fashion-MNIST、ImageNet的子集等。
  • d2l.train:封装了模型训练、评估、学习率调度等流程。
  • d2l.plot:基于matplotlib封装了可视化函数,用于绘制损失曲线、权重分布等。
  • d2l.torch/d2l.mxnet/d2l.tensorflow:按后端区分的API入口。

正因为它是教学库,所以它依赖的第三方包非常杂:numpy、pandas、matplotlib、requests、jupyter、torch(或mxnet/tensorflow)、scipy等等。这套依赖链一拉下来,少说几十个包,任何一个环节的网络超时、权限拦截、版本冲突,都会导致安装失败。

1.2 Windows 安装 d2l 的三个核心痛点

第一,依赖链过长。pip在安装时会把所有依赖包一次拉取下来,中途只要有一个包下载超时,整个安装就会回滚,但已下载的缓存不会清理,下次装的时候可能因为缓存损坏继续报错。

第二,pip子进程权限问题。这正是标题里PermissionError: [WinError 5]的直接来源。pip安装某些包时,会调用子进程去执行一些脚本(比如编译C扩展、更新命令行入口),而Windows对Anaconda安装目录默认有严格的权限控制,尤其是装在C:\ProgramData\Anaconda3或者用户目录下的Anaconda文件夹,如果当前终端不是管理员权限,子进程创建文件时就会触发拒绝访问。

第三,软件源网络问题。默认的PyPI源、甚至conda默认源,在国内网络环境下经常超时,导致下载一半失败。这个好解决,换清华镜像源就行,后面我会给出具体命令。

注意:如果你看到的报错是error loading "D:\Users\ww117\Anaconda\...",说明你是在安装过程中某个包的post-install script阶段挂掉了。这不是包没下载下来,而是下载完了、解压完了、准备写脚本入口时被系统拦了。

2. 动手前的准备:Anaconda、Python 版本与软件源选型

2.1 Anaconda 安装要点与路径选择

如果你还没装Anaconda,先去清华镜像站下载安装包,版本建议选Anaconda3-2024.02以后的版本,自带Python 3.11,兼容性比较稳。安装时有两个地方一定要注意:

一是安装路径不要选择默认的C:\ProgramData\Anaconda3,也不要放在带中文或空格的路径下。Windows对ProgramData目录的权限控制非常严格,普通用户没有写权限,pip子进程在那边创建临时文件时极易触发PermissionError。我的建议是直接装在D:\Anaconda3或C:\Anaconda3这种盘符根目录下的纯英文路径。

二是安装向导里有一个选项叫Add Anaconda3 to my PATH environment variable,这里我的建议是勾选,但如果你担心和系统已有的Python冲突,那也可以不勾,后面用Anaconda Prompt操作就行。个人经验,初学者还是勾上更省事,但要注意,勾选之后打开CMD,python命令指向的必须是Anaconda的Python,否则后面会出现pip装到系统Python里、conda环境里却找不到包的情况。

2.2 配置 conda 和 pip 镜像源

安装完成后,先别急着建环境,把软件源配好可以省掉后面90%的超时烦恼。

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 --set show_channel_urls yes

pip 换清华源,执行:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

换源这件事,不要跳过。我见过太多人卡在Downloading xxx半天然后Read timed out,换了清华源之后,整包下载速度能提升好几倍,尤其是PyTorch那种1GB以上的大包,效果立竿见影。

2.3 不要装到 base 环境,一定要建虚拟环境

d2l库的依赖比较重,而且它的教程经常要求特定版本的PyTorch或numpy,如果你直接往base环境里怼,很容易把Anaconda自带的numpy、scipy版本搞乱,最后连conda本身都用不了。建一个干净的虚拟环境,所有依赖都隔离在里面,出问题直接删掉重建,成本极低。

打开Anaconda Prompt或者普通终端,执行:

conda create -n d2l python=3.9 -y

为什么选择Python 3.9而不是3.11?因为d2l库以及它所依赖的某些包,在3.9下兼容性最稳定。虽然d2l官方声明支持3.9到3.11,但实测下来,Python 3.9几乎不会遇到版本冲突,省心。

注意:创建环境后,每次安装前都先确认自己在哪个环境里。终端命令行开头会显示(base)或(d2l),如果显示(base),执行conda activate d2l切换过去。

3. 完整安装 d2l 的实操过程(以 PyTorch 后端为例)

3.1 创建虚拟环境并安装基础包

假设你已经按照上文创建了名为d2l的环境,接下来第一步是升级pip,这一步经常被忽略,但新版pip对依赖解析更合理,也能减少子进程报错的概率:

conda activate d2l python -m pip install --upgrade pip

如果你在不该出现的阶段碰到了PermissionError,比如说官方文档压根没提但你就是遇到了,那大概率就是这里。因为pip升级的时候,需要覆盖Anaconda目录下旧版本的pip文件,权限不足时就会被拒。

接着安装Jupyter和基础依赖:

pip install jupyter matplotlib pandas scipy requests

这几个包是d2l运行的基础,也可以直接等安装d2l时自动拉取,但拆开装的好处是如果某一个包下载失败,你只重试那一个就行,不用整个依赖链全部重来。

3.2 安装 PyTorch CPU 版和 d2l 库

如果你用的是NVIDIA显卡且CUDA环境已配置好,可以去PyTorch官网生成对应的安装命令。但如果你只是跟着教材学原理,CPU版足够用,安装命令也最简单:

pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu

然后安装d2l:

pip install d2l

此时大概率会看到pip开始解析一堆依赖,然后下载、安装、执行脚本。如果你运气好,一路走到Successfully installed d2l-...,恭喜你,可以直接跳到第3.3节做验证。

如果你看到PermissionError: [WinError 5] 拒绝访问。error loading "D:\Users\ww117\Anaconda...",别慌,这个就是下一节要解决的核心问题,先继续读。

装d2l的时候,它默认会安装支持所有后端的版本,包括mxnet和tensorflow的额外依赖。如果你确定只用PyTorch,可以稍微缩小安装范围,但不是必须的。个人建议直接全装,因为《动手学深度学习》有些章节会做后端对比,全装了反而省事。

3.3 导入验证与 Jupyter Notebook 内核关联

装完之后先做一次导入验证,确保环境没问题:

python -c "import d2l; import torch; print('d2l version:', d2l.__version__); print('torch version:', torch.__version__)"

如果输出正常说明安装成功。接下来把当前环境关联到Jupyter Notebook:

pip install ipykernel python -m ipykernel install --user --name d2l --display-name "Python (d2l)"

以后再打开Jupyter Notebook,新建内核时选择Python (d2l)就会自动使用你这个虚拟环境,不用再手动切换。

4. PermissionError [WinError 5] 拒绝访问:原因分析与完整解决方案

4.1 这个报错到底是在哪个环节出现的

先理清楚报错出现的时机,这决定了你用哪种方案解决。

第一种情况是pip安装过程中,某个依赖包下载完成后,pip会运行它自带的setup.py或post-install脚本来生成可执行入口文件。这些脚本需要向Python的Scripts目录写入.exe文件。如果你的Anaconda目录权限不允许当前用户写入,就会爆出PermissionError: [WinError 5] 拒绝访问。

第二种情况是安装时终端不是管理员权限,同时Anaconda安装目录是在C:\ProgramData或C:\Users\你的用户名\Anaconda这类受Windows UAC保护的位置。此时pip子进程执行命令时没有提升权限,写入动作被系统拦下。

第三种情况是杀毒软件(尤其是Windows自带的Defender或某些国产杀软)正在实时扫描Anaconda目录,锁定了某些正在被pip操作的文件,导致写入失败。

从报错信息里的路径D:\Users\ww117\Anaconda来看,这个用户是把Anaconda装在D盘了,这已经避开了C:\ProgramData的权限坑,但仍然出现拒绝访问,那多半就是杀软锁文件,或是pip子进程的执行上下文权限不够。

4.2 常规修复手段:管理员运行、关杀软、改路径

方法一:用管理员身份重新运行终端。

在开始菜单找到Anaconda Prompt,右键“以管理员身份运行”,然后重新执行:

conda activate d2l pip install d2l

这个操作解决的是子进程权限不足的问题。用管理员运行时,pip子进程获取到的token是提升过的,写入Scripts目录不会碰到UAC拦截。实测中,这一招能解决大约五成的WinError 5问题。

方法二:临时关闭杀毒软件和Defender的实时保护。

Windows Defender的“实时保护”会锁定目录里的.exe和.dll文件进行扫描,pip写入新文件时如果被锁,就会报拒绝访问。临时关闭的路径是:设置 -> 隐私和安全性 -> Windows 安全中心 -> 病毒和威胁防护 -> 管理设置 -> 实时保护,关掉之后再去重试安装。装完后记得重新打开。如果你装的是其他杀软,同样先退出再重试。

注意:如果你用的是公司电脑或校园网环境,可能存在组策略强制开启杀毒的情况,这时候关不掉实时保护,就往下看方法三。

方法三:把Anaconda放到纯英文短路径,并放开Users目录的权限。

有些人的Anaconda虽然装在D盘,但用户目录D:\Users\ww117\Anaconda里包含特殊字符,或者目录层级太深,Windows在解析长路径时也可能触发奇怪的权限问题。建议直接装到D:\Anaconda3,然后右键文件夹 -> 属性 -> 安全 -> 编辑 -> 给当前用户勾上“完全控制”。这一步是给pip子进程一个明面上的写入许可,能解决一部分路径权限问题。

4.3 针对“子进程报错”场景的进阶解决

如果你已经用管理员身份运行、关了杀毒,仍然报error loading "D:\Users\ww117\Anaconda\...",说明问题不在权限本身,而在于pip的post-install脚本执行时,加载的某个动态链接库或依赖模块被占用或损坏。

这时候尝试下面几步,按顺序执行:

第一步,清理pip缓存。缓存里可能存着下载一半或损坏的wheel文件,重新安装时pip会优先用缓存,结果反复失败:

pip cache purge

第二步,强制重装出问题的包。报错信息里通常会显示是在安装哪个包时执行的脚本,或者在报错上方有几行Running setup.py install for xxx的日志,找到那个包名,单独重装它:

pip install --no-cache-dir --force-reinstall 包名

第三步,如果依然报错,可以考虑用--no-build-isolation参数避免隔离构建环境带来的权限切换:

pip install --no-build-isolation d2l

第四步,终极手段:绕过pip的post-install脚本,改用conda安装d2l相关依赖。conda在Windows上的安装机制和pip不同,它不执行setup.py生成入口文件,而是直接分发编译好的二进制包,基本不会触发WinError 5。

conda install -n d2l jupyter matplotlib pandas scipy -y pip install d2l

前面几个重包用conda装好,剩下的d2l本体再让pip去装,它需要执行的脚本就少很多,不容易触发权限问题。

4.4 终极兜底:把环境的 Scripts 目录权限全部放开

如果你装了很多包,不想一个一个排查,可以直接把Anaconda目录下当前环境的Scripts、Lib、DLLs三个文件夹的写入权限全部放开。具体操作:在文件资源管理器里进入D:\Anaconda3\envs\d2l,右键Scripts文件夹 -> 属性 -> 安全 -> 编辑 -> 选中“Users” -> 在“Users的权限”下方勾选“完全控制”,应用确定。Lib和DLLs文件夹做同样的操作。

这个办法确实有点粗暴,但非常有效。Windows下的权限模型比较迷,你明明已经给了当前用户完全控制,但pip子进程可能是以另一个账户上下文去执行的,直接把Users组放开,能覆盖绝大多数场景。

我线上帮人排查这个报错时,发现一个规律:凡是报错路径里出现Users\xxx\Anaconda或ProgramData\Anaconda的,放开Scripts目录权限后基本都能解决;凡是报错路径里出现Temp\pip-...的,多半是杀软锁缓存文件,清理缓存或关闭实时保护后就能解决。

5. 装完之后常见问题速查表

5.1 六个高频问题与对应解法

问题现象大概率原因解决方案
pip install d2l卡在Solving environment...超时conda依赖解析时间过长,或源速度慢用pip代替conda安装;或给conda换上清华源
ERROR: Could not install packages due to an OSError: [WinError 5]Scripts目录无写权限管理员运行终端,或放开环境目录权限
ModuleNotFoundError: No module named 'd2l'pip装到了其他环境执行conda activate d2l再验证python -c "import d2l"
ImportError: numpy.core.multiarray failed to importnumpy版本和PyTorch不兼容pip install --upgrade numpy或降级numpy到1.24.x
torch.cuda.is_available()返回False安装的是CPU版或CUDA版本不匹配安装GPU版:卸载torch后去官网重新安装对应CUDA版
Jupyter里 import d2l 成功但 import torch 失败Jupyter内核选错环境重新执行python -m ipykernel install --user --name d2l

第一行的“Solving environment”问题特别容易出现在conda安装大包时,我个人的经验是:凡是conda解析超过5分钟还在转圈,直接Ctrl+C取消,改用pip。pip虽然也会有依赖解析,但通常几十秒内就出结果。

第二行的OSError也就是WinError 5的不完全形态,有时pip会把它报成OSError: [WinError 5] 拒绝访问而不是PermissionError,处理思路和上文一致。

5.2 建议的排查顺序

碰到任何安装异常,先按下面的顺序排查,不要一上来就重装Anaconda:

  1. 确认当前激活环境是不是d2l:conda info --envs,看有没有星号标记。
  2. 确认pip指向的是哪个Python:pip --version,看路径里有没有envs\d2l。
  3. 查看报错信息的完整日志,不只是最后一行。往上翻10到20行,定位是在下载、解压、编译还是执行脚本时出错。
  4. 依次执行:管理员运行、关杀软、清理pip缓存、放开目录权限、conda+pip混合安装。
  5. 最后才考虑删掉环境重来:conda deactivate && conda env remove -n d2l -y。

排查时最重要的一点是一次只改一个变量。不要同时又是管理员运行又是关杀毒又是改权限,否则就算问题解决了,你也不知道到底是哪一步起的作用,下次换台电脑照样抓瞎。

5.3 给新手的额外提示

第一次装d2l的人,还有两个容易忽略的小点:

一是不要同时开会多个终端窗口操作conda环境,多个conda进程同时访问同一个环境时偶尔会触发文件锁定,表现出来也是PermissionError,但很多人会误以为是权限问题。

二是《动手学深度学习》代码里面经常用d2l.show_fashion_mnist这类绘图函数,如果之后运行代码时提示找不到某个可视化相关的库,多半是d2l的某个额外依赖没装上,执行pip install matplotlib补一下就行,别又想着去重装整个d2l。

6. 写在后面:关于环境安装,我的一点个人体会

装d2l这件事本身不复杂,真正复杂的其实是Windows环境下Python生态的权限和路径管理。我在实际安装中踩得最多的坑,恰恰不是d2l本身的依赖冲突,而是那些看起来和Python毫无关系的系统级问题:杀毒软件锁文件、目录权限不对、终端权限不够。这些问题的共同特点是报错信息特别吓人,但解决方式往往简单得让人想笑。

所以我个人的习惯是,装完Anaconda之后第一件事就是建一个单独的虚拟环境,然后把镜像源、权限、杀毒软件相关的策略全部提前配好,而不是等报错来了再逐项排查。另外一个小技巧是,安装d2l这种依赖繁多的库时,把pip命令加上--progress-bar off,日志会清爽很多,报错时更容易定位是哪一个包出的问题。

希望这篇指南能帮你在Windows下一次性把d2l装好,少走几步弯路。如果中途碰到别的报错,建议先去pip或conda的日志文件里看一眼真实出错原因,再对症下药。环境装好了以后,真正花时间的地方就在理解深度学习本身了,祝学习顺利。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 7:36:20

STM32定时器时间基准全解析:从时钟树到PWM与LPTIM

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 7:35:40

ESP32智能家居实战:WiFi+BLE联动网关方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 7:35:35

UFS3.1协议实战排障指南:从Link训练到Command队列深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 7:35:34

医疗影像分割精度提升:PSPNet中PPM模块的四大改造实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 7:33:10

有限域运算与GF(2^8)实现:从本原元到查表法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 7:30:04

ROS2 Launch实战:一键启动所有节点,告别多终端手动调试

写ROS2项目最烦什么?对我来说,不是接口对不上,也不是编译报错,而是每次调试都要打开一堆终端:一个跑master(虽然ROS2已经没有中心节点了,但习惯还在)、一个跑节点、一个跑rviz2&…

作者头像 李华