使用 bazel py_binary 传递 python 命令行参数

Passing python command line arguments using bazel py_binary

所以我试图结合使用 python 和 bazel 在一起,我想知道是否有一种方法可以在 运行 时传递 python 脚本参数的值通过 bazel 目标编写脚本。

所以想法是:

我有一些 main.py 文件接受参数并执行一些逻辑

#main.py
import argparse

class ClassA:
  def __init__(self, arg1):
    pass
  #incredible logic happens here :D 


def parse_arguments():
    parser = argparse.ArgumentParser(description="....")
    parser.add_argument(
        "--arg1",
        required=True)

if __name__ == "__main__":
    ARGS = parse_arguments()
    ClassA(ARGS.arg1) # will execute whatever has to happen and return something

通常,为了 运行 这个脚本,我会 运行 像这样:

python -m main.py --arg1=val1

但现在我有兴趣执行这个脚本,同时有一个 bazel 目标,比如:

#BUILD 

py_binary( 
    name = "binary1",
    srcs = ["main.py"],
    main = "main.py",
    visibility = ["//public"],
)

有没有办法 运行 使用类似以下内容的脚本: bazel run //path/to/py_binary --arg1=val1

如果不是,在使用此 bazel 目标时 运行 宁 python 脚本的替代方案是什么?

P.S。我正在使用 Python 3.5+

您可以通过在要传递给二进制文件的命令行选项之前放置 -- 来完成此操作,如下所示:

bazel run //pkg:binary1 -- --arg1=val1

bazel run -- //pkg:binary1 --arg1=val1

https://docs.bazel.build/versions/master/user-manual.html#run