尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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操作就行。个人经验初学者还是勾上更省事但要注意勾选之后打开CMDpython命令指向的必须是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 yespip 换清华源执行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 python3.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然后安装d2lpip 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 Notebookpip 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 d2lpip装到了其他环境执行conda activate d2l再验证python -c import d2lImportError: numpy.core.multiarray failed to importnumpy版本和PyTorch不兼容pip install --upgrade numpy或降级numpy到1.24.xtorch.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分钟还在转圈直接CtrlC取消改用pip。pip虽然也会有依赖解析但通常几十秒内就出结果。第二行的OSError也就是WinError 5的不完全形态有时pip会把它报成OSError: [WinError 5] 拒绝访问而不是PermissionError处理思路和上文一致。5.2 建议的排查顺序碰到任何安装异常先按下面的顺序排查不要一上来就重装Anaconda确认当前激活环境是不是d2lconda info --envs看有没有星号标记。确认pip指向的是哪个Pythonpip --version看路径里有没有envs\d2l。查看报错信息的完整日志不只是最后一行。往上翻10到20行定位是在下载、解压、编译还是执行脚本时出错。依次执行管理员运行、关杀软、清理pip缓存、放开目录权限、condapip混合安装。最后才考虑删掉环境重来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的日志文件里看一眼真实出错原因再对症下药。环境装好了以后真正花时间的地方就在理解深度学习本身了祝学习顺利。
返回列表