J'essaie de déterminer comment le module gen_io_ops est généré par bazel lors de la construction de TensorFlow à partir de la source.Où est la règle bazel qui génère le fichier `gen_io_ops.py` lors de la construction de TensorFlow à partir de sources?
Dans tensorflow/python/ops/io_ops.py, il y a ce morceau de code:
from tensorflow.python.ops.gen_io_ops
[...]
# used in the TextLineReader initialization
rr = gen_io_ops._text_line_reader_v2(...)
se référant au module bazel-genfiles/tensorflow/python/ops/gen_io_ops.py
(et généré par bazel lors de la construction tensorflow).
Le _text_line_reader_v2
est un wrapper de TextLineReaderV2
défini dans tensorflow/tensorflow/core/kernels/text_line_reader_op.cc.
Pour autant que je comprends, l'étape de construction sont les suivants:
1) La bibliothèque du noyau pour le text_line_reader_op
est construit en tensorflow/tensorflow/core/kernels/BUILD
tf_kernel_library(
name = "text_line_reader_op",
prefix = "text_line_reader_op",
deps = IO_DEPS,)
où tf_kernel_library
regarde essentiellement pour text_line_reader_op.c fichier et le construire.
2) La bibliothèque du noyau :text_line_reader_op
est ensuite utilisé comme une dépendance par la bibliothèque io
définie dans the same file:
cc_library(
name = "io",
deps = [
":text_line_reader_op", ...
],
)
Je suppose que la bibliothèque io
contient maintenant la définition du noyau TextLineReaderV2
.
D'après ce que je reçois de ce answer, il devrait y avoir une troisième étape où la bibliothèque io
est utilisée pour générer les emballages de python qui sont dans le module bazel-genfiles/tensorflow/python/ops/gen_io_ops.py
. Cette génération de fichier peut être effectuée par la règle tf_op_gen_wrapper_py
dans Basel ou par la méthode tf.load_op_library()
, mais aucune d'entre elles ne semble impliquée.
Est-ce que quelqu'un sait où cette troisième étape est définie dans le processus de construction?