git - 数据版本控制:管道参数中的绝对路径和项目路径?
问题描述
在 DVC 中,可以定义管道。在 Unix 中,通常不能在根级别工作。此外,DVC 期望文件位于 git 存储库中。
所以,这似乎是一个典型的问题。
假设我有以下内容:
/home/user/project/content-folder/data/data-type/cfg.json
/home/user/project/content-folder/app/foo.py
Git 开始于/home/user/project/
cd ~/project/content-folder/data/data-type
../../app/foo.py do-this --with cfg.json --dest $(pwd)
对我来说似乎是合理的:脚本采用存储在特定位置的配置,针对一些封装的功能运行它,并使用绝对路径将其输出到目的地。
的默认行为--dest
是输出到当前工作目录。这似乎是另一个合理的默认值。
接下来,我去配置params.yaml
文件dvc
,我立即感到困惑和不确定会发生什么。我写的:
foodoo:
params: do-this --with ????/cfg.json --dest ????
我想写的(并且会在 shell 脚本中):
#!/usr/bin/env bash
origin:=$(git rev-parse --show-toplevel)
verb=do-this
params=--with $(origin)/content-folder/data/data-type/cfg.json --dest $(origin)/content-folder/data/data-type
但是,在 DVC 中,路径似乎是隐含的,我也不知道从哪里开始:
- DVC 将在本地计算我的脚本的路径
- 不在本地计算我的脚本的路径
这很好——我可以发现这一点。但我有理由确定 DVC 绝对不会在我的 params.yaml 中的目录和文件参数前面加上我的项目路径。
如何实现不假定固定项目位置的路径控制,就像我在 BASH 中那样?
解决方案
默认情况下,DVC 将从与dvc.yaml文件相同的目录运行您的阶段命令。如果您需要从其他位置运行命令,您可以通过 指定备用工作目录wdir
,该目录应该是相对于dvc.yaml
的位置的路径。
阶段中其他所有内容的路径(如params.yaml
)应指定为相对于wdir
(或相对于dvc.yaml
如果wdir
未提供)。
查看您的示例,DVC 中的参数似乎也有些混乱。在 DVC 阶段,params
用于指定参数依赖项,不用于指定命令行标志。包含标志/选项的完整命令应包含在cmd
您的阶段部分中。如果您想确保每次cfg.json
更改某些值时都重新运行您的阶段,您的阶段params
部分将如下所示:
params:
<relpath from dvc.yaml>/cfg.json:
- param1
- param2
...
所以你的例子dvc.yaml
看起来像:
stages:
foodoo:
cmd: <relpath from dvc.yaml>/foo.py do-this --with <relpath from dvc.yaml>/cfg.json --dest <relpath from dvc.yaml>/...
deps:
<relpath from dvc.yaml>/foo.py
params:
<relpath from dvc.yaml>/cfg.json:
...
...
这将使命令dvc repro
在 foo.py 中的代码发生更改或指定参数发生更改时重新运行您的阶段cfg.json
。
您可能还想参考dvc run的文档,它可用于生成或更新dvc.yaml
阶段(而不是手写dvc.yaml
)
推荐阅读
- sas - SAS:计算(加、减、乘、除)数据集中的值
- django - 如何遍历两个模型以获取 django 模板中的属性差异?
- flutter - NoSuchMethodError:在 null 上调用了方法“isBefore”
- c++ - 快速逆平方根算法是否比 C++ 的标准库 sqrt() 函数更快?
- delphi - 如何将 IPWorks 与自签名 SSL 证书一起使用?
- javascript - Puppeteer 中的 jsHandle 和 elementHandle 有什么区别?
- asp.net-core - .Net Core 5 中的自定义授权属性
- python - 通过在列表之间映射值来创建列表
- amazon-web-services - 有什么方法可以像 Microsoft Learn 中那样使用 AWS/Azure 创建限时 Windows 沙盒?
- html - 每当单击按钮时如何阻止页面向上滚动?