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

问题描述

因此,我尝试将python和bazel结合使用,我想知道是否有一种方法可以在通过bazel目标运行该脚本时传递python脚本参数的值。

所以想法是:

我有一些main.py文件,它接受args并执行一些逻辑

#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

但是现在我有兴趣在执行此脚本的同时为其设置目标,例如:

#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