Bu benim dizin yapımızdır.Paketlerde protobuf üretilen modüller içe aktarılıyor
.
|-- A
| |-- B
| | `-- b.proto
| `-- C
| `-- c.proto
`-- py_gen
Bu
protoc --python_out=py_gen/ --proto_path ${ROOT}/A ${ROOT}/A/B/b.proto \
${ROOT}/A/C/c.proto
gibi test.proto derlemek ve bana böyle sonuçlar olduğunu.
.
`-- py_gen
|-- B
| `-- b_pb2.py
`-- C
`-- c_pb2.py
Her şey gayet iyi çalışıyor ve ben $ {KÖK}/A/B/py_gen/B ve $ {ROOT}/A/B/py_gen/eklerseniz ben modülü her modülü almak ve kullanabilirsiniz Benim PYTHONPATH'da.
Modül c ithalatı söz konusu olduğunda sorun geliyor b. (the protobuf tutorial itibaren) "Python, paketler normalde dizin yapısı tarafından belirlenir" Bunun nedeni,
import B.b_pb2
Bu beklenen budur ithal c için oluşturulan kodda çevirmek olacaktır. Ancak, B.b_pb2.py'yi bulamadığı için c modülünü içe aktaramıyorum. Şu anda, çalışmasını sağlamak için, oluşturulan dizinler B ve C içinde boş __init__.py dosyalarını eklemek zorundayım. Peki neden oluşturulan dizin yapısında __init__.py yok? Bir şey unutuyor muyum? Pitona çok yeni geldim, bu yüzden burada bariz bir şeye bakabilirim. Ama piton tutorial
okuma __init__.py dosyaları Python paketlerini içeren dizinler olarak algılaması için gereklidir.
Gerçekten de .py uzantısı olmadan içe aktarım yapıyorum, bu soru yazarken benim hatamdı (düzeltiyorum), teşekkürler. – stefano
Neden paket yapısını oluşturmamalı? Dizin yapısını oluşturuyor ve modüllerin bağımlılıklarının farkında. – stefano