当前位置: 首页 > 知识库问答 >
问题:

使用Python编译Jaeger gRPC原型文件

东郭远航
2023-03-14

我目前正在玩Jaeger Query,并试图通过使用gRPC的应用编程接口访问其内容。我不熟悉gRPC,但我的理解是,我需要在相关的原始文件上使用Python gRPC编译器(grpcio_tools.protoc)来获取有用的Python定义。我想做的是找出通过API访问Jaeger Query的方法,而无需前端UI。

目前,我一直在编译proto文件。每次尝试时,我都会遇到依赖性问题(导入“fileNameHere”未找到或有错误)。Jaeger查询。proto文件包含对repo外部文件的导入引用。虽然我可以找到这些并手动收集它们,但它们也有依赖关系。我的印象是,一个接一个地跟踪和收集这些信息并不是我们想要做的。

我在这里做错了什么吗?通过Jaeger直接留档是有限的。下面是我的基本终端会话,在包括任何手动找到的文件之前(它们本身有依赖关系,我必须去查找文件)。

$ python -m grpc_tools.protoc --grcp_python_out=. --python_out=. --proto_path=. query.proto
model.proto: File not found.
gogoproto/gogo.proto: File not found.
google/api/annotations.proto: File not found.
protoc-gen-swagger/options/annotations.proto: File not found.
query.proto:20:1: Import "model.proto" was not found or had errors.
query.proto:21:1: Import "gogoproto/gogo.proto" was not found or had errors.
query.proto:22:1: Import "google/api/annotations.proto" was not found or had errors.
query.proto:25:1: Import "protoc-gen-swagger/options/annotations.proto" was not found or had errors.
query.proto:61:12: "jaeger.api_v2.Span" is not defined.
query.proto:137:12: "jaeger.api_v2.DependencyLink" is not defined.

谢谢你的帮助。

共有2个答案

孙修德
2023-03-14

我执行了以下操作以获取Jaeger gRPC Python API:

git clone --recurse-submodules https://github.com/jaegertracing/jaeger-idl
cd jaeger-idl/
make proto

使用proto gen python中的文件。

注意:在导入生成的代码时,如果您遇到错误:

AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'

执行:

pip3 install --upgrade pip
pip3 install --upgrade protobuf
蒙峰
2023-03-14

我的一位同事提供了答案。。。它隐藏在Makefile中,对我来说不起作用,因为我不使用Golang(它比安装Golang并运行它更复杂,但我跑题了……)。

以下内容。sh会成功的。这假设查询。proto file是与下面的脚本位于同一位置的子目录,位于model/proto/api\u v2/(如Jaeger repo主目录中所示)下。

#!/usr/bin/env sh
set +x

rm -rf ./js_out 2> /dev/null
mkdir ./js_out

PROTO_INCLUDES="
    -I model/proto \
    -I idl/proto \
    -I vendor/github.com/grpc-ecosystem/grpc-gateway \
    -I vendor/github.com/gogo/googleapis \
    -I vendor/github.com/gogo/protobuf/protobuf \
    -I vendor/github.com/gogo/protobuf"

python -m grpc_tools.protoc ${PROTO_INCLUDES} --grpc_python_out=./python_out --python_out=./python_out model/proto/api_v2/query.proto

这肯定会生成所需的Python文件,但它仍然缺少依赖项。

 类似资料:
  • 我已经编译了我的。proto文件使用protobuf编译器并收到了一组Java文件。我收到了一份原始文件。java文件和。中每个项目的java文件。proto文件,包括消息类型和每个RPC调用,例如publicKeyRequest。java和Quote。java作为RPC和请求参数类型。 这是所有需要的文件吗,因为我似乎仍然无法从服务器获得任何简单的响应? 我想为PublicKeyRequest

  • 查看google fhir的自述文件,它说要运行,这是可行的,但是没有编译任何协议文件。 运行返回一系列关于找不到其他proto的错误。这会一直追溯到“描述符”。“proto”,它不是文件夹中的proto。该目录中的任何协议文件都不会手动编译为java文件。 *另一方面,我能够从其他来源获取其他protos示例并成功编译它们。 使现代化 运行命令proto--proto_path=proto/st

  • 本文向大家介绍如何使用Python使用Tensorflow编译和拟合模型?,包括了如何使用Python使用Tensorflow编译和拟合模型?的使用技巧和注意事项,需要的朋友参考一下 Tensorflow是Google提供的一种机器学习框架。它是一个开放源代码框架,可与Python结合使用,以实现算法,深度学习应用程序等等。它用于研究和生产目的。 它具有优化技术,可帮助快速执行复杂的数学运算。 这

  • 编译器架构

  • 校验码 奇偶校验 通常用于对少量数据的校验 奇校验 将信息数据的各位进行模二加法并作为校验码的称为奇校验。 偶校验 将信息数据的各位进行模二加法并取反作为校验码的称为偶校验。 海明码 采用多位校验码的方式,可以发现、纠正错误。数据位和校验位必须满足关系式:2校验位-1≥数据位+校验位。码距至少是3。 循环冗余校验码 检错能力非常强,但是不能纠错。编码长度(CRC字长)为数据位+校验位 文法 终结符

  • 给出了以下简单的项目结构。 内容是