這是我的目錄結構。在軟件包中導入protobuf生成的模塊
.
|-- A
| |-- B
| | `-- b.proto
| `-- C
| `-- c.proto
`-- py_gen
我這樣進行編譯
protoc --python_out=py_gen/ --proto_path ${ROOT}/A ${ROOT}/A/B/b.proto \
${ROOT}/A/C/c.proto
的test.proto,這是我得到的結果。
.
`-- py_gen
|-- B
| `-- b_pb2.py
`-- C
`-- c_pb2.py
這一切工作正常,我可以導入每個模塊並使用模塊,如果我有$ {ROOT}/A/B/py_gen/B和$ {ROOT}/A/B/py_gen/C在我的PYTHONPATH中。
當模塊c導入b時會出現問題。這將在生成的代碼轉換對C導入
import B.b_pb2
這是預期的,因爲(從the protobuf tutorial)「在Python,包通常由目錄結構決定的」。但是,我無法導入模塊c,因爲它沒有找到B.b_pb2.py。目前,爲了使它工作,我必須在生成的目錄B和C中添加空的__init__.py文件。 那麼爲什麼生成的目錄結構中沒有__init__.py?我忘記了什麼嗎?我對python非常陌生,所以我可能在這裏忽略一些明顯的東西。但是閱讀python tutorial
需要__init__.py文件才能使Python將目錄視爲包含包。
我的確輸入了沒有.py擴展名的文件,這是我在編寫問題(我正在糾正它)時的錯誤,謝謝。 – stefano
爲什麼它不應該生成包結構?它正在生成目錄結構並知道模塊的依賴關係。 – stefano