使用Bazel和不使用Bazel的区别

3
我试图理解bazel的目的和用法。
对于这个项目,运行命令为bazel run -c opt :train_ptn -- --init_model={}。这个命令和只运行python train_ptn.py有什么区别?
此外,这个GitHub项目只包含Python脚本,为什么我们需要bazel来运行这个项目?
1个回答

6
这里是bazel run的文档:https://docs.bazel.build/versions/master/user-manual.html#run 通常情况下,bazel run //foo:bin 确保目标 //foo:bin 和其所有依赖项都已构建并且是最新的,然后在定义良好的工作目录中以及设置了某些环境变量的情况下运行目标。
与直接运行二进制文件相比,工作目录和环境可能包含任何内容(Bazel 无法控制),因此二进制文件可能会找不到其期望位置的数据文件和依赖项。即使 //foo:bin 是一个 Python 脚本,并且您从正确的工作目录运行它,其中一些依赖项可能是需要重新构建的生成文件。
在特殊情况下,例如您提供的项目,直接运行二进制文件(或使用 Python)是可以的,但您必须知道这一点。使用 bazel run 就免去了您必须知道是否可以直接运行脚本的负担,并且如果例如有人向包添加了生成的源文件,则可以防止未来对项目的更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接