【问题标题】:LongPathsEnabled feature doesn't seem to workLongPathsEnabled 功能似乎不起作用
【发布时间】:2021-12-26 22:57:09
【问题描述】:

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

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\LongPathsEnabled 设置为 1 来解除限制。
在对注册表项进行修改后,我重新启动系统并尝试再次安装tensorflow。它没有用 - 我收到了同样的错误信息。然后我回到微软文档页面,发现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 文档页面中说明),但我没有'不知道如何设置此选项,因为它应该在设置注册表项并重新启动我的电脑后立即工作。我记得大约半年前,我在之前的 Windows 10 安装中遇到了同样的问题,并且非常容易修复 - LongPathsEnabled 设置为 1,PC 重新启动,pip install &lt;some-package&gt; 成功。这个答案:Filename too long in Git for Windows 暗示某些程序默认禁用 Long Paths 功能,但我不知道是否是这种情况,即使是这种情况,如何为pip 设置它。顺便说一句,pip config set &lt;name&gt; &lt;value&gt; 失败,因为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 的情况下解决,我会很高兴,但这一切看起来很奇怪。

【问题讨论】:

  • 不幸的是,可以解除限制,但如果文件名超过 MAX_PATH,许多程序仍然无法在 Windows 中正常运行。关于您的 C++ 代码 - 根据文档,行为会因您的 Windows 版本而异。您可能还需要转义反斜杠。
  • @RyanPepper 谢谢你的澄清。我将python降级到3.7版,tensorflow安装成功。
  • 这应该是一个错误或者你做错了什么。如果 MSDN 说 CreateFile2() 支持具有上述设置的长文件,根据我的经验,这通常是可以信任的。您是否尝试过查找现有的错误通知单或自己提交错误通知单?
  • @UlrichEckhardt 还没有,有没有合适的方法来归档,考虑我的系统设置或其他一些重要的东西?

标签: python c++ windows pip group-policy


【解决方案1】:

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

【讨论】:

  • 您提交了错误票吗?网址?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多