2017-04-17 2 views
1

Bazelを使用してTensorFlowのカスタムビルドシステムをセットアップしようとしています。 ビルドステップ中にキャッシュとして使用する構成ステップ中に、一時ファイルを作成する必要があります。 私は私の.bzlファイルで作成することができました:Bazelでテンポラリファイルを作成して読み込みます。

repository_ctx.file(filename) 

し、設定した後、私はフォルダ内にあること、それを見ることができます:

リポジトリ名が実際に repository_ctx.name

ある

$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name% 

をしかし、ビルド時に私の.tplスクリプトからこのパスにアクセスすることはできません。私はrepository_ctx.templateの置換を使って.bzlスクリプトから送信したかったのですが、ここでも私はこのパスを見つける方法が見つかりませんでした!

bazel-outやbazel-genfilesなどのシンボリックリンクを使用してこのフォルダにアクセスできるようには見えません(非常に有望ですが、そうではありません...)。私はまた、このフォルダの外にファイルを作成することができませんでした。

答えて

1

私はこの問題を推測すると思いますが、あなたは、露光していないということです...

は、それは非常に単純な問題だと私はちょうどfindそれへのパスかをハードコーディングするより他に方法がないことを信じることができませんあなたのビルドがそれを使用するためには、リポジトリのBUILDファイルにファイルを作成します。そして、あなたが他のビルドファイルで@repository_name//:whateverを使用することができます

repository_ctx.file('whatever') 
repository_ctx.file('BUILD', 'exports_files(["whatever"])') 

:あなたのような何かをする必要があります。

exports_filesは、パッケージを他のパッケージのソースファイルに依存させるために使用されます。

次に、あなたがビルド時に読み込んでいるあなた.bzlファイルに、属性としてファイルを追加し、例えば、

​​

次に、ルールの実装では、コンテキストを介してアクセスすることができます:

def _impl(ctx): 
    print(ctx.file._my_external_src.path) 

.pathは、ファイルのパスを取得します。

+0

ハム私は参照してください。ですから、この '@repository_name //:何でも'をBUILDファイルからtplファイルに送る方法を見つけなければなりません。私はあなたの答えを受け入れると思う、ありがとう! – Zakor

+1

問題ありません! .bzlファイルからアクセスする方法を追加しました。 – kristina

関連する問題