关于Windows 10 版本 1607 及更高版本中的长路径问题

部署运行你感兴趣的模型镜像

先说我的结论:Windows 10 版本 1607 及更高版本系统就已经支持长路径了,系统虽然支持,但应用程序要使用长路径,依然要设置“启用 Win32 长路径”,原因参考 《在 Windows 10 版本 1607 及更高版本中启用长路径》,还有参考第3点的实际应用情况

然后不用再怀疑你的操作系统是否支持长路径了,我之前就怀疑是否因为我的神州网信政府版原因,有限制不支持长路径呢?结果我在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 及更高版本中启用长路径》中提到如下:

在 Windows 10 版本 1607 及更高版本中启用长路径

从 Windows 10 版本 1607 开始,许多常见的 Win32 文件和目录函数中删除了 MAX_PATH 限制。 但是,你的应用必须选择支持新行为。

要为每个应用程序启用新的长路径行为,必须满足两个条件。 必须设置注册表值,应用程序清单必须包含 longPathAware 元素。

用于启用长路径的注册表设置

 重要

了解启用此注册表设置将只影响为利用新功能而修改的应用程序。 开发人员必须将其应用声明为可感知长路径,如以下应用程序清单设置中所述。 这不是将影响所有应用程序的更改。

注册表值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) 必须存在并设置为 1。 在首次调用受影响的 Win32 文件或目录函数后,系统(每个进程)将缓存此注册表值(请参见下面的函数列表)。 在进程的生存期内,将不会重新加载注册表值。 为了使系统上的所有应用都能识别该值,可能需要重新启动,因为某些进程可能在设置密钥之前已经启动。

你还可以将此代码复制到一个可以为你设置此项的 .reg 文件中,或者通过提升的特权在终端窗口中使用 PowerShell 命令:

控制台复制

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

 备注

还可以在 Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths 中通过组策略控制此注册表设置。 还可以使用 策略配置服务提供程序(CSP)通过 Microsoft Intune 应用策略。

应用程序清单会更新以声明长路径功能

应用程序清单还必须包含 longPathAware 元素。

XML复制

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>

没有 MAX_PATH 限制的函数

如果你选择支持长路径行为,那么以下目录管理函数不再具有 MAX_PATH 限制:CreateDirectoryW、CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW。

如果你选择支持长路径行为,那么以下文件管理函数不再具有 MAX_PATH 限制:CopyFileW、CopyFile2、CopyFileExW、CreateFileW、CreateFile2、CreateHardLinkW、CreateSymbolicLinkW、DeleteFileW、 FindFirstFileW、FindFirstFileExW、FindNextFileW、GetFileAttributesW、GetFileAttributesExW、SetFileAttributesW、GetFullPathNameW、GetLongPathNameW、MoveFileW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindNextFileNameW、FindFirstStreamW、FindNextStreamW、GetCompressedFileSizeW、GetFinalPathNameByHandleW。

3、---设置启用长路径,编译告警消失,编译进行中--------

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值