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.
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.
Tags und Links python protocol-buffers