2011-03-24 11 views
8

Tengo el siguiente código en un archivo de búfer de protocolo (pcfg_lm.proto):En Buffers de protocolo, ¿cómo importar un archivo desde el directorio de nivel superior?

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

package nlp; 

message PCFGProto { 
    required Language lang = 1; 
} 

Y por supuesto, hay un archivo existe en el proto ../types/language.proto. Sin embargo, cuando ejecute el comando:

protoc pcfg_lm.proto --cpp_out=/tmp 

Aquí está el mensaje de error:

../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. 

Creo que tiene que haber alguna manera de especificar los nombres de los archivos en los directorios de nivel superior, sin utilizar el - Yo señalo ¿Pero cómo hago eso?

+1

Me encontré con el mismo problema, pero no recuerdo la solución. IIRC la ruta de importación se interpreta en relación con el directorio donde se llama a un protocolo, no en relación con el archivo proto actual. O algo así ... – LumpN

+1

Demonios, sí, acabo de encontrar un viejo código de proto. Es como lo describí. Estoy llamando al protocolo desde el directorio base de proyectos como 'protoc --cpp_out = graph/node.proto graph/edge.proto' y en edge hay' import "graph/node.proto"; 'aunque ambos archivos están en el mismo directorio – LumpN

Respuesta

16

Puede usar la directiva --proto_path = para especificar qué directorios buscar las importaciones. Se puede usar varias veces si es necesario.

El correcto --proto_path dependerá de cómo se defina el paquete en el archivo importado (language.proto).

  1. Si el archivo importado (language.proto) contiene tipos de paquetes;

    especificar --proto_path = directorio de Padres y cambiar a la importación

    importación "tipos/language.proto";

  2. Si el archivo importado tiene ningún paquete

    especificar --proto_path = directorio padre/tipos y cambiar a la importación

    importación "language.proto";

+0

Eso ayuda. ¡Gracias! – bighead

+0

, ¿también puede especificar un jar en proto path? – Righto

+0

@Brue Matrin, con python, su solución dará excepción: pcfg_lm.proto: Importar "language.proto" no se ha cargado al ejecutar un script de python que importó pcfg_lm_pb2.py –

Cuestiones relacionadas