我试图确定在从源代码构建TensorFlow时,bazel是如何生成gen-iu-io-ops模块的。在
在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时由bazel生成)。_text_line_reader_v2
是tensorflow/tensorflow/core/kernels/text_line_reader_op.cc中定义的TextLineReaderV2
的包装器。在
据我所知,构建步骤如下:
1)在tensorflow/tensorflow/core/kernels/BUILD中构建text_line_reader_op
的内核库
基本上,{emreader}在这里查找 2)然后, 我假设 根据我从这个answer得到的信息,应该有一个第三步,其中 是否有人知道第三步是在构建过程中定义的?:text_line_reader_op
内核库被the same file中定义的io
库用作依赖项:cc_library(
name = "io",
deps = [
":text_line_reader_op", ...
],
)
io
库现在包含了TextLineReaderV2
内核的定义。在io
库用于生成bazel-genfiles/tensorflow/python/ops/gen_io_ops.py
模块中的python包装器。这种文件生成可以通过巴塞尔协议中的tf_op_gen_wrapper_py
规则或tf.load_op_library()
方法来完成,但它们似乎都不涉及其中。在
我终于明白了。在
确实存在对
tf_op_gen_wrapper_py
的调用,但它隐藏在对tf_gen_op_wrapper_private_py
的调用中:所以步骤如下。在
在tensorflow/tensorflow/python/BUILD中,有一条规则
^{pr2}$因此,在这个规则中,}中,因此{}模块将由此规则生成。在
_gen
后缀将被删除(在tf_gen_op_wrapper_private_py
中),并且一个gen_
前缀将被添加到{相关问题 更多 >
编程相关推荐