在 GitHub 上编辑

如何在 Windows 上运行 DVC

在 Microsoft Windows 上运行 DVC 时可能会出现各种问题,主要涉及系统性能。例如,某些问题与 NTFS 文件系统特性以及 Windows 内置的安全机制有关。以下是一些可帮助避免这些问题的变通方法:

您知道吗?DVC 已支持 Microsoft Visual Studio Code!更多详情请见 此处

类 POSIX 命令行环境

Windows 中的标准命令提示符(cmd)很可能无法有效支持您使用 DVC,也无法帮助您遵循我们文档中的示例。以下是几种替代方案:

换行符

如果您使用的是 Windows,并且需要与非 Windows 用户或环境(例如生产环境)协作,那么您可能最终会遇到换行符相关的问题。这是因为 Windows 在文件中使用回车符和换行符(CRLF)来表示换行,而 macOS 和 Linux 系统仅使用换行符(LF)。

由于 DVC 使用基于内容的校验和来管理您的管道依赖项,因此根据您的 Git 配置(参见 core.autocrlf 和 core.eol 配置选项),DVC 可能会认为被 Git 跟踪的文件已更改,从而在一个系统上触发 dvc repro 的管道重新执行,而在另一个系统上则不会。因此,我们强烈建议在跨平台协作时统一使用 LF 换行符。

将编辑器配置为使用 LF 换行符

Windows 上的许多编辑器默认会使用 CRLF 换行符,甚至会将现有的 LF 替换为 CRLF。建议您将编辑器配置为始终使用 LF 换行符。

对于 VS Code,请添加

{
  "files.eol": "\n"
}

到您的全局 settings.json 或项目目录下的 .vscode/settings.json 文件中。

使用 .gitattributes 设置 LF 换行符

为了提升 DVC 在 Windows 上的兼容性,建议使用带有 eol 属性的 .gitattributes 文件来配置换行符。

在您的 .gitattributes 文件中添加以下内容:

* text=auto eol=lf

该配置会指示 Git 将所有文件视为文本文件,并统一使用 LF 换行符,无论平台如何。

将 Git 配置为使用 LF 换行符

core.autocrlf 设置为 false,并将 core.eol 设置为 lf

$ git config --global core.autocrlf false
$ git config --global core.eol lf

现在 Git 将一致地处理换行符。

使用 pre-commit 钩子检查并修复换行符

将以下内容添加到你的 .pre-commit-config.yaml 钩子中:

- id: mixed-line-ending
  args: [--fix=lf]

使 pre-commit 能够检查并自动将所有换行符替换为 LF。

符号链接(Symlinks)是 DVC 可用于优化目的的文件链接类型之一。Windows 上支持符号链接,但需要用户具备“创建符号链接”的权限。默认情况下,该权限授予“管理员”(Administrators)组,因此偶尔使用时可以在管理员权限的终端中运行 dvc。对于普通用户,可通过本地策略设置手动授予该权限。

DVC 的Windows 安装程序会自动完成此设置,但如果你通过其他方式安装(如 chococondapip),你可能需要手动配置

在 Windows 安全中心中加入白名单

Windows 10 内置了Windows 安全中心防病毒功能。如果用户希望避免对特定文件夹或文件进行杀毒扫描以提升性能,可按照本指南将其加入 Windows 安全中心的白名单。例如,我们可以将 DVC 的二进制文件加入白名单,以加快处理速度。

启用长路径支持

当文件夹路径长度超过 260 个字符时,DVC 命令(例如 dvc pulldvc repro)可能会失败,出现错误 [Errno 2] No such file or directory。从 Windows 10 开始,大多数文件和目录函数已移除路径长度限制,但需要用户主动启用该功能。可通过修改组策略或注册表项来显式启用长路径,具体操作请参考本指南

修复或禁用搜索索引

搜索索引功能也可能拖慢 Windows 上的文件 I/O 操作。如果你不需要该功能,可以尝试修复禁用它。

禁用短文件名生成

对于 NTFS 文件系统,用户可根据本文建议禁用 8dot3 格式,从而关闭短文件名生成功能。当单个目录中包含超过 30 万文件时,禁用此功能对提升性能尤为重要。

避免在目录中存放大量文件

此问题所述,NTFS 在处理目录内大量文件时性能会下降。

使用 less 启用分页显示

默认情况下,DVC 会尝试使用Less作为dvc dag命令输出的分页工具。然而 Windows 系统默认不提供 less 命令。幸运的是,可以通过Chocolatey轻松安装。安装 Chocolatey 后,请运行:

$ choco install less

less 可以通过其他方式安装,只需确保在运行 dvc 的命令行环境中可以使用 less。(这通常意味着将 less 安装目录添加到 PATH 环境变量中。)