先说我的结论:无需运行 gpedit.msc 设置“启用 Win32 长路径” ,Windows 10 版本 1607 及更高版本系统就已经支持长路径了,为了保险起见,还是设置启用吧。
然后不用再怀疑你的操作系统是否支持长路径了,我之前就怀疑是否因为我的神州网信政府版原因,有限制不支持长路径呢?结果我在Windows server2019的资源管理器上也无法建立长路径,才继续深入找原因。
1、---起因--------------------------------------------------------------------------------
最近因为在编译python wheel 时,遇到了这样的错误信息:
creating C:\Users\Monday\AppData\Local\Temp\pip-install-4ls6iq2w\xformers_bcf4f67735df4e9aae791b64a7228251\build\temp.win-amd64-cpython-312\Release\Users\Monday\AppData\Local\Temp\pip-install-4ls6iq2w\xformers_bcf4f67735df4e9aae791b64a7228251\third_party\flash-attention\csrc\flash_attn\src
cl: 命令行 warning D9025 :正在重写“/D__CUDA_NO_HALF_OPERATORS__”(用“/U__CUDA_NO_HALF_OPERATORS__”)
fatal : Could not open output file C:\Users\Monday\AppData\Local\Temp\pip-install-4ls6iq2w\xformers_bcf4f67735df4e9aae791b64a7228251\build\temp.win-amd64-cpython-312\Release\Users\Monday\AppData\Local\Temp\pip-install-4ls6iq2w\xformers_bcf4f67735df4e9aae791b64a7228251\third_party\flash-attention\csrc\flash_attn\src\flash_bwd_hdim192_bf16_causal_sm80.obj.d
有网上说是因为Windows不支持长路径导致,根据网上关于如何启用Windows长路径支持,一顿猛操作,错误依然(其实应该是上面上一行的错误原因,导致文件没有创建而已,并不是长路径问题导致,而且第1行中建立长路径,也没有出错)。
2、---探索--------------------------------------------------------------------------------
于是我就想,我是不是可以手工试试是否支持长路径呢?
于是就在资源管理器里面建立长路径,咦,还真是建立不了哦,路径长度到达248个左右的字符长度后,便不能再建立路径了:
直到看了这篇文章《Even with LongPathsEnabled set to 1, Windows 10 Explorer doesn't seem to support long paths》 以及这篇文章《windows10操作系统文件名和路径名长度的严重问题》,并通过测试才发现,原来只是在Windows10的资源管理器里面无法建立长路径而已(资源管理器是能浏览长路径的)。通过支持长路径的应用,例如power shell等,是可以建立操作长路径的(路径长度达到了286个字符,可以更长):
而且无需运行 gpedit.msc 设置“启用 Win32 长路径” ,即是说系统已经支持长路径了。
在微软官网《在 Windows 10 版本 1607 及更高版本中启用长路径》中提到:
我的理解是,这些函数不再具有MAX_PATH限制,已经支持长路径。