用于从 C++ 自动生成的 python 模块的 TensorFlow 源
Posted
技术标签:
【中文标题】用于从 C++ 自动生成的 python 模块的 TensorFlow 源【英文标题】:Tensorflow source for autogenerated python modules from C++ 【发布时间】:2018-03-30 21:17:25 【问题描述】:我经常想查看一些 tensorflow 模块的源代码。通常,API 的很大一部分是用原生 python 编写的,相关文件在 github 上很容易找到。但是,有一些重要的部分是我用 C++ 编写的,我找不到它们的源代码。例如,根据 TensorFlow 官方文档,大部分数学运算都定义在 tensorflow/python/ops/gen_math_ops.py
中。但是,GitHub 上没有这样的文件。我本地安装的 TF 有这个文件,但是在 GitHub 上查看源代码要容易得多。我还想了解我应该在哪里搜索指定如何生成 python 文件的规则。如果这是一个愚蠢的问题,我很抱歉,但我不熟悉 bazel。
【问题讨论】:
相信你可以在core
找到gen文件的C++源码。所以对于tensorflow/python/ops/gen_math_ops.py
,您可以在tensorflow/tensorflow/core/ops/math_ops.cc
找到C++ 源代码。我不确定生成文件的规则,所以我将其添加为评论。
【参考方案1】:
我还想了解我应该在哪里搜索指定如何生成 python 文件的规则。
为此使用bazel query
。
如果您想知道哪个规则生成文件(例如$PROJECT/some/dir/file.py
),请从项目根目录运行此命令:
bazel query --output=build some/dir/file.py
例如,如果我想找出哪个规则生成了一个特定的 jar
文件,bazel query
会打印以下内容:
$ bazel query --output=build examples/java-native/src/test/java/com/example/myproject/hello.jar
# /Users/foo/bazel/examples/java-native/src/test/java/com/example/myproject/BUILD:1:1
java_test(
name = "hello",
deps = ["//examples/java-native/src/main/java/com/example/myproject:hello-lib", "//third_party:junit4"],
srcs = ["//examples/java-native/src/test/java/com/example/myproject:TestHello.java"],
test_class = "com.example.myproject.TestHello",
)
查看Query how-to documentation page 了解更多bazel query
提示。
【讨论】:
以上是关于用于从 C++ 自动生成的 python 模块的 TensorFlow 源的主要内容,如果未能解决你的问题,请参考以下文章
Python ImportError - 未定义符号 - 用于自定义 C++ 模块
Python 错误:在 SWIG 生成的 C++ 模板代码模块中未定义构造函数