2011-03-24 54 views
8

我有一个协议缓存文件(pcfg_lm.proto)以下代码:在Protocol Buffers中,如何从上一级目录导入文件?

import "../types/language.proto"; 

package nlp; 

message PCFGProto { 
    required Language lang = 1; 
} 

当然并有一个原文件存在于../types/language.proto。然而,当我发出命令:

protoc pcfg_lm.proto --cpp_out=/tmp 

以下是错误消息:

../types/language.proto: File not found. 
pcfg_lm.proto: Import "../types/language.proto" was not found or had errors. 
pcfg_lm.proto:6:12: "Language" is not defined. 

我认为必须有某种方式在上层目录,指定文件名,不使用 - 我标志。但我该怎么做?

+1

我遇到了同样的问题,但我不记得解决方案。 IIRC导入路径相对于您调用protoc的目录进行解释,而不是相对于当前proto文件本身。或者类似的东西... – LumpN 2011-03-24 13:52:44

+1

地狱是啊,我只是找到了一些老的原始码。正如我所描述的那样。我从protoc --cpp_out = graph/node.proto图/ edge.proto这样的项目基目录调用protoc,并且在边缘有'import'graph/node.proto“;'即使这两个文件都在同一个目录。 – LumpN 2011-03-24 13:59:37

回答

16

您可以使用--proto_path =指令来指定要搜索导入的目录。如果需要,它可以多次使用。

正确的--proto_path将取决于包在导入文件(language.proto)中的定义方式。

  1. 如果导入的文件(language.proto)包含封装类型;

    指定--proto_path = 父目录和更改导入到

    导入 “类型/ language.proto”;

  2. 如果导入的文件没有包

    指定--proto_path = 父目录/类型,改变进口

    进口 “language.proto”;

+0

这有帮助。谢谢! – bighead 2011-03-26 14:29:44

+0

你也可以在proto路径中指定一个jar吗? – Righto 2017-11-13 14:06:52

+0

@Brue Matrin,用python,你的解决方案会给出异常:pcfg_lm.proto:import“language.proto”在运行导入pcfg_lm_pb2.py的python脚本时未加载 – 2018-01-17 07:36:28

相关问题