我試圖確定從源構建TensorFlow時,bazel如何生成gen_io_ops模塊。從源構建TensorFlow時,bazel規則在哪裏生成`gen_io_ops.py`文件?
在tensorflow/python/ops/io_ops.py,有這一段代碼:
from tensorflow.python.ops.gen_io_ops
[...]
# used in the TextLineReader initialization
rr = gen_io_ops._text_line_reader_v2(...)
參照bazel-genfiles/tensorflow/python/ops/gen_io_ops.py
模塊(和構建TensorFlow當由巴澤勒生成)。
_text_line_reader_v2
是在tensorflow/tensorflow/core/kernels/text_line_reader_op.cc中定義的TextLineReaderV2
的包裝。
據我瞭解,構建步驟的優勢如下:
1)爲text_line_reader_op
內核庫建在tensorflow/tensorflow/core/kernels/BUILD
tf_kernel_library(
name = "text_line_reader_op",
prefix = "text_line_reader_op",
deps = IO_DEPS,)
其中tf_kernel_library
基本上查找text_line_reader_op.c文件並構建它。
2)的:text_line_reader_op
內核文庫,然後通過在the same file定義的io
庫用作依賴性:
cc_library(
name = "io",
deps = [
":text_line_reader_op", ...
],
)
我假定io
庫現在包含TextLineReaderV2
內核的定義。
從我從這個answer得到的,應該有一個第三步其中io
庫用來生成Python包裝屬於bazel-genfiles/tensorflow/python/ops/gen_io_ops.py
模塊中。該文件生成可以通過巴塞爾中的tf_op_gen_wrapper_py
規則或tf.load_op_library()
方法來完成,但它們都沒有涉及。
有人知道在構建過程中何處定義了第三步嗎?