在 dvc 的命令部分扩展环境变量 运行
Expanding environment variables in the command part of a dvc run
总结:我正在尝试使用 dvc-run
定义 dvc
步骤,其中命令取决于某些环境变量(例如 $HOME
).问题是,当我在机器 A 上定义步骤时,变量在存储在 .dvc
文件中时会扩展。在这种情况下,将无法在机器 B 上重现该步骤。我是否达到了 dvc
的限制?如果不是这种情况,正确的方法是什么?
更多详细信息:我在尝试定义命令为 docker run
的步骤时遇到了问题。说:
- 在机器 A 上
myrepo
位于 /Users/user/myrepo
和
- 在机器 B 上,它位于
/home/ubuntu/myrepo
。
此外,假设我有一个脚本 myrepo/script.R
,它处理要在 myrepo/data/mydata.txt
中找到的数据文件。最后,假设我的步骤命令类似于:
docker run -v $HOME/myrepo/:/prj/ my_docker_image /prj/script.R /prj/data/mydata.txt
如果我是 运行 dvc run -f step.dvc -d ... -d ... [cmd]
其中 cmd
是上面的 docker
执行,那么在 step.dvc
环境变量 $HOME
将被扩大。在这种情况下,步骤将在机器 B 上中断。
来自docs:
Use single quotes ' instead of " to wrap the command if there are environment variables in it, that you want to be evaluated dynamically. E.g. dvc run -d script.sh './myscript.sh $MYENVVAR'
总结:我正在尝试使用 dvc-run
定义 dvc
步骤,其中命令取决于某些环境变量(例如 $HOME
).问题是,当我在机器 A 上定义步骤时,变量在存储在 .dvc
文件中时会扩展。在这种情况下,将无法在机器 B 上重现该步骤。我是否达到了 dvc
的限制?如果不是这种情况,正确的方法是什么?
更多详细信息:我在尝试定义命令为 docker run
的步骤时遇到了问题。说:
- 在机器 A 上
myrepo
位于/Users/user/myrepo
和 - 在机器 B 上,它位于
/home/ubuntu/myrepo
。
此外,假设我有一个脚本 myrepo/script.R
,它处理要在 myrepo/data/mydata.txt
中找到的数据文件。最后,假设我的步骤命令类似于:
docker run -v $HOME/myrepo/:/prj/ my_docker_image /prj/script.R /prj/data/mydata.txt
如果我是 运行 dvc run -f step.dvc -d ... -d ... [cmd]
其中 cmd
是上面的 docker
执行,那么在 step.dvc
环境变量 $HOME
将被扩大。在这种情况下,步骤将在机器 B 上中断。
来自docs:
Use single quotes ' instead of " to wrap the command if there are environment variables in it, that you want to be evaluated dynamically. E.g. dvc run -d script.sh './myscript.sh $MYENVVAR'