我试图确定从源构建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()
方法来完成,但它们都没有涉及。
有人知道在构建过程中何处定义了第三步吗?