2017-08-20 1 views
1

私は、paziの依存関係を扱うbazelを手に入れようとしています。bazel pypiマクロセルフエッジ

./pypi.bzl:

def _impl(ctx): 
    ctx.actions.run_shell(
    command = "pip download %s" % ctx.package 
) 

_pypi_package = rule(
    implementation=_impl, 
    attrs={"package": attr.label(mandatory=True)}, 
) 

def pypi_package(package): 
    _pypi_package(name = package, package = package) 

./BUILD:

py_binary(
    name = "app", 
    srcs = ["app.py"], 
    deps = [":python-dateutil"] 
) 

load("//:pypi.bzl", "pypi_package") 

pypi_package(
    package="python-dateutil", 
) 

構築しようとすると:

$ bazel build app 
ERROR: /path/to/cwd/BUILD:9:1: in _pypi_package rule //:python-dateutil: cycle in dependency graph: 
    //:app 
.-> //:python-dateutil [self-edge] 
`-- 
This cycle occurred because of a configuration option. 
ERROR: Analysis of target '//:app' failed; build aborted. 
INFO: Elapsed time: 0.219s 

これも作業するための正しいアプローチである場合には考えていません外部の依存関係とは、それを無視して、私はここで自己鎮圧から来ているか分からない。実際には、私はpypi_packageルールのためのdepsを宣言しているとは思えません。どうしたの?

答えて

2

問題はattr.labelでした。ここで「ラベル」はBUILDラベルを意味します。私はattr.stringを使っていたはずです。

+0

[run_shell'](https://docs.bazel.build/versions/master/skylark/lib/actions.html#run_shell)に 'outputs'を指定する必要があると思います。そうしないとBazelに理由がありませんアクションを実行する(何も出力に依存しないため)。 –

関連する問題