importiert protobuf generierte Module in Paketen

9

Dies ist meine Verzeichnisstruktur.

%Vor%

Ich kompiliere das test.proto wie folgt

%Vor%

und das sind die Ergebnisse, die ich bekomme.

%Vor%

Alles funktioniert gut, und ich kann jedes Modul importieren und das Modul verwenden, wenn ich $ {ROOT} / A / B / py_gen / B und $ {ROOT} / A / B / py_gen / C in meinen PYTHONPATH einschließe .

Das Problem kommt zum Beispiel, wenn Modul c importiert b. Dies würde den generierten Code für den Import von

übersetzen %Vor%

Dies wird erwartet, weil "In Python Pakete normalerweise nach Verzeichnisstruktur bestimmt sind" (aus das protobuf-Tutorial ). Ich kann Modul c jedoch nicht importieren, da es B.b_pb2.py nicht findet. Im Moment muss ich leere __init__.py Dateien in die generierten Verzeichnisse B und C einfügen, damit es funktioniert. Warum gibt es kein __init__.py in der generierten Verzeichnisstruktur? Vergesse ich etwas? Ich bin Python sehr neu, also könnte ich hier etwas Offensichtliches übersehen. Aber lesen Sie das Python Tutorial

  

Die Dateien __init__.py werden benötigt, damit Python die Verzeichnisse als Pakete behandeln kann.

    
stefano 23.06.2011, 13:58
quelle

1 Antwort

3

Nur:

%Vor%

Ohne das .py Ende. Damit dies funktioniert, muss das B -Verzeichnis eine __init__.py -Datei enthalten, die leer sein kann. Dies teilt Python mit, dass es sich um ein Paket -Verzeichnis handelt. AFAIK protobuf wird das __init__.py nicht für Sie eingeben - aber auch nicht, da es das Ziel ist, nur ein einzelnes Modul für Sie zu generieren.

    
Eli Bendersky 23.06.2011 14:06
quelle

Tags und Links