我正在尝试创建一个自定义构建规则,以从py_binary输出构建一个pip包。要创建我的pip包,我需要调用一个shell脚本。外壳脚本通过从py_binary输出的runfile创建一个zip文件来构建一个pip包。
例如,假设我有
py_binary(
name = "some_binary",
srcs = ["some_binary.py"],
srcs_version = "PY2AND3",
)构建此规则会产生
bazel-bin/some_binary.runfiles现在,我想创建一个自定义构建规则,它将调用带有bazel/Somebinary.runfiles位置的shell脚本。
我试着创建一个宏
def build_pip_package(
name, py_binary=None, setup_file=None):
"""Create a pip package from a py_binary.
The source file should be a text file with python formatting i.e.
Args:
name: Name for the rule.
py_binary: Build rule producing the py_binary
setup_file: Build rule producing the setup.py file to use to produce
the package.
"""
output= "somefile"
native.genrule(
name=name,
outs=[output],
cmd="echo $(location //:build_pip_package_script) "
+ "--py_runfiles_path=$(locations %s)" % py_binary
+ " --setup_file=$(location %s) " % setup_file,
tools=["//:build_pip_package_script"],
srcs=[setup_file, py_binary])这将调用我的shell脚本。
bazel-out/local-fastbuild/bin/some_binary/model_train some_binary.py 如何使用与some_binary目标对应的runfiles目录的位置调用脚本。
发布于 2017-05-25 16:07:53
如果将py_binary放在tools属性中而不是srcs中,bazel将包括runfiles树。您可以通过"$(location %s).runfiles" % py_binary访问它
https://stackoverflow.com/questions/44171570
复制相似问题