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 ../.

在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
的默认行为是输出到当前工作目录。这似乎是另一个合理的违约


接下来,我要为
dvc
配置
params.yaml
文件,我立即感到困惑,不确定会发生什么。我写道:

foodoo:
  params: do-this --with ????/cfg.json --dest ????
我想写的内容(并将在shell脚本中编写):


但是,在DVC中,路径似乎是隐含的,我也不知道从哪里开始:

  • DVC将在本地计算脚本的路径
  • 不在本地计算脚本的路径
  • 这很好,我可以发现。但我有理由相信DVC绝对不会在我的params.yaml中的目录和文件params前面加上我的项目路径



    如何实现不采用固定项目位置的路径控制,就像我在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:
            ...
        ...