错误详情
在开发一个自动分发工具的时候,使用 zipfile.extractall 解压下载的 zip 包。 但在解压过程中莫名报错 no such file or directory。
处理过程
最开始以为是网络传输过程中压缩文件损坏,所以添加了 MD5 校验,但校验后发现包是正确的。 然后本地重新打包并解压,验证压缩包确实没有问题。 以为 python 本身出了问题,尝试重新安装,未果。 以为是中文路径的问题,使用纯英文路径,问题仍在。 最后发现是因为 Windows 默认路径长度限制 260 字符,而压缩包中的路径较深,因此无法解压。 而之前手动测试解压的时候为了方便直接在 D 盘根目录解压,恰好没有碰到路径上限。
解决方案
在程序启动的时候往注册表中写入如下信息:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
LongPathsEnabled=1
解除 Windows 的路径长度限制。考虑到用户体验,需要弹个窗告知用户。