启用长路径的功能似乎不起作用



我遇到的最初问题是由于以下原因pip无法安装tensorflowlib WindowsMAX_PATH260 个字符的限制。这是我收到的消息:

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory:
'C:\Users\Root\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\
local-packages\Python39\site-packages\tensorflow\include\external\com_github_grpc_grpc\
src\core\ext\filters\client_channel\lb_policy\grpclb\client_load_reporting_filter.h'
HINT: This error might have occurred since this system does not have Windows Long Path support enabled.
You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths

我查找了pip建议的提示页面。这链接到Microsoft文档页面,该页面解释说可以通过将REG_DWORD注册表项HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystemLongPathsEnabled设置为1来解除限制。
对注册表项进行修改后,我重新启动了系统并尝试再次安装tensorflow。它不起作用 - 我收到了相同的错误消息。然后我回到Microsoft文档页面,发现LongPathsEnabled选项也可以通过组策略编辑器(又名gpedit.msc)激活。在那里,我直接转到Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths并将策略设置为Enabled(尽管设置了注册表项,但最初是Not Configured的)。然后我再次重新启动我的电脑,打开cmd并再次键入pip install tensorflow。收到相同的错误消息。
这就是事情开始变得有趣的地方:我能够发现LongPathsEnables选项似乎根本不适用于我的 PC。以下是Microsoft文档的内容:

这些是文件管理功能,如果您选择加入长路径行为,则不再有MAX_PATH限制:CopyFileW,CopyFile2,CopyFileExW,CreateFileW,CreateFile2...

所以我打开Visual Studio并编写了以下代码:

int main(int argc, char ** argv)
{
HANDLE fileHandle = CreateFile2(
L"C:\Users\Root\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\tensorflow\include\external\com_github_grpc_grpc\src\core\ext\filters\client_channel\lb_policy\grpclb\client_load_reporting_filter.h",
GENERIC_ALL,
0,
CREATE_ALWAYS,
NULL
);
if (fileHandle == INVALID_HANDLE_VALUE)
{
DWORD error = GetLastError();
cout << "CreateFile2 failed with LastError code: " << error << endl;
}
else
{
cout << "Success" << endl;
}
getchar();
return 0;
}

这失败了GetLastError()代码 3(ERROR_PATH_NOT_FOUND- 系统找不到指定的路径)。需要注意的是,当我缩短C:\Users\Root\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\tensorflow\include\external\com_github_grpc_grpc\src\core\ext\filters\client_channel\client_load_reporting_filter.h路径时,导致 252 个字符长的路径,它成功了,所以我推断CreateFile2似乎也没有确定正在设置LongPathsEnabled选项。C++程序问题的原因可能是在其应用程序清单中应该有一个longPathsAware元素设置为true(这在我上面提到的同一Microsoft文档页面中说明),但我不知道如何设置此选项,因为它应该在设置注册表项并重新启动我的 PC 后立即工作。我记得大约半年前我在以前的 Windows 10 安装中遇到了同样的问题,它非常容易地修复 -LongPathsEnabled设置为1,PC 重新启动,pip install <some-package>成功。这个答案:Windows Git 中的文件名太长意味着某些程序默认禁用了长路径功能,但我不知道是否是这种情况,即使是这样,如何为pip设置它。顺便说一下,由于无法访问pip.ini文件进行写入(在PID: 0年打开),pip config set <name> <value>失败了。
尝试手动创建文件(client_load_reporting_filter.h),从互联网上复制原始内容,也无济于事。当我在notepad++中打开它时,路径字符串C:UsersRootAppDataLocalPackagesPYTHON~1.9_QLOCALC~1LOCAL-~1Python39SITE-P~1TE1A26~1includeexternalCOM_GI~1srccoreextfiltersCLIENT~1LB_POL~1grpclbCLIENT~1.H,因此notepad++似乎也无法与长路径一起使用。

我现在完全无知和绝望,所以我决定在这里问一个问题,希望有人经历过这种情况,也许能够提供帮助。如果可以在不重新安装 Windows 的情况下解决问题,我会很高兴,但这一切似乎都很奇怪。

好的,伙计们,我已经通过将 Python 降级到 3.7 版解决了张量流安装的问题。但是CreateFile2的问题仍然存在,所以我的这部分问题没有得到解答。
感谢Ryan Pepper,他通过提到许多程序仍然不能正确支持Windows长路径的事实来澄清情况。

相关内容

最新更新