python zipfile.extractall 报错 no such file or directory


错误详情

在开发一个自动分发工具的时候,使用 zipfile.extractall 解压下载的 zip 包。 但在解压过程中莫名报错 no such file or directory。

处理过程

最开始以为是网络传输过程中压缩文件损坏,所以添加了 MD5 校验,但校验后发现包是正确的。 然后本地重新打包并解压,验证压缩包确实没有问题。 以为 python 本身出了问题,尝试重新安装,未果。 以为是中文路径的问题,使用纯英文路径,问题仍在。 最后发现是因为 Windows 默认路径长度限制 260 字符,而压缩包中的路径较深,因此无法解压。 而之前手动测试解压的时候为了方便直接在 D 盘根目录解压,恰好没有碰到路径上限。

解决方案

在程序启动的时候往注册表中写入如下信息:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
LongPathsEnabled=1

解除 Windows 的路径长度限制。考虑到用户体验,需要弹个窗告知用户。