Git 数据版本控制:管道参数中的绝对路径和项目路径?
在DVC中,可以定义管道。在Unix中,通常不在根级别工作。此外,DVC希望文件位于git存储库中 所以,这似乎是一个典型的问题 假设我有以下几点:Git 数据版本控制:管道参数中的绝对路径和项目路径?,git,path,dvc,Git,Path,Dvc,在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 ../.
/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
的默认行为是输出到当前工作目录。这似乎是另一个合理的违约
接下来,我要为
dvc
配置params.yaml
文件,我立即感到困惑,不确定会发生什么。我写道:
foodoo:
params: do-this --with ????/cfg.json --dest ????
我想写的内容(并将在shell脚本中编写):
但是,在DVC中,路径似乎是隐含的,我也不知道从哪里开始:
如何实现不采用固定项目位置的路径控制,就像我在BASH中所做的那样?默认情况下,DVC将从与文件相同的目录运行stage命令。如果需要从其他位置运行该命令,可以通过
wdir
指定备用工作目录,该目录应该是相对于dvc.yaml
位置的路径
阶段中所有其他内容(如params.yaml
)的路径应指定为相对于wdir
(或相对于dvc.yaml
,如果未提供wdir
)
看看您的示例,DVC中的参数似乎也有点混乱。在DVC阶段,params
用于指定,而不是用于指定命令行标志。包含标志/选项的完整命令应包含在舞台的cmd
部分中。如果希望确保每次cfg.json
中的某些值发生更改时都重新运行stage,则stage的params
部分将类似于:
params:
<relpath from dvc.yaml>/cfg.json:
- param1
- param2
...
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 repo
在foo.py中的代码发生更改或cfg.json
中的指定参数发生更改时重新运行stage
您可能还需要参考的文档,这些文档可用于生成或更新
dvc.yaml
stage(而不是手动编写dvc.yaml
)太棒了!我有一段时间很沮丧,直到我发现DVC没有犯我预期的任何错误,而且比预期的要多得多。
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:
...
...