繁体   English   中英

LongPathsEnabled 功能似乎不起作用

[英]LongPathsEnabled feature doesn't seem to work

我遇到的最初问题是由于 Windows MAX_PATH限制为 260 个字符, pip无法安装tensorflow lib。 这是我收到的消息:

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_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem\\LongPathsEnabled1来解除限制。
在我对注册表项进行修改后,我重新启动系统并尝试再次安装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 config set <name> <value>失败,因为pip.ini文件无法写入(在PID: 0打开)。
尝试手动创建文件( client_load_reporting_filter.h ),从互联网复制原始内容,但也没有帮助。 当我在notepad++打开它时,路径字符串是C:\\Users\\Root\\AppData\\Local\\Packages\\PYTHON~1.9_Q\\LOCALC~1\\LOCAL-~1\\Python39\\SITE-P~1\\TE1A26~1\\include\\external\\COM_GI~1\\src\\core\\ext\\filters\\CLIENT~1\\LB_POL~1\\grpclb\\CLIENT~1.H所以notepad++似乎也无法使用长路径。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM