2011-03-24 82 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

相關問題