J'ai ma structure de répertoire comme ceci:Comment importer des définitions de tampon de protocole d'un autre paquet Python?
root/
sift/
__init__.py
sift_descriptors.proto
sift_descriptors_pb2.py
project/
__init__.py
filtered_descriptors.proto
filtered_descriptors_pb2.py
filtered_descriptors_test.py
Le répertoire racine est dans mon $PYTHONPATH
.
Je construis root/sift/sift_descriptors_pb2.py
utilisant protoc --python_out=./ sift_descriptors.proto
Je construis root/project/filtered_descriptors_pb2.py
utilisant /cs/public/lib/pkg/protobuf/bin/protoc --proto_path=../sift --proto_path=./ --python_out=./ filtered_descriptors.proto
En filtered_descriptors.proto
, j'utilise import "sift_descriptors.proto"
Le problème est que dans filtered_descriptors_pb2.py
(produit par protoc), il y a une déclaration qui fait juste cette importation nue: import sift_descriptors_pb2
, sans référence via le nom du module comme cela serait nécessaire: from sift import sift_descriptors_pb2
.
Qu'est-ce que je fais mal?
En parlant avec les responsables des tampons de protocole, --proto_path est supposé pointer vers la racine de la hiérarchie du paquet et toutes les importations doivent être entièrement qualifiées. Pas bien décrit dans la documentation, mais ils vont le réparer :) –