मेरे पास एक पायथन परियोजना है जो तैनाती के लिए setuptools का उपयोग करती है और मैं ज्यादातर परियोजना संरचना के संबंध में this guide का पालन करता हूं। परियोजना नेटवर्क संदेश प्रारूप को परिभाषित करने के लिए Google प्रोटोकॉल बफर का उपयोग करती है। मेरा मुख्य मुद्दा यह है कि setup.py को _pb2.py फ़ाइल में परिभाषाओं को बनाने के लिए संस्थापन के दौरान प्रोटोक-कंपाइलर को कैसे कॉल करें।प्रोटोकॉल बफर का उपयोग कर पाइथन प्रोजेक्ट, परिनियोजन मुद्दे
this question में सलाह के साथ परिणामस्वरूप _pb2.py फ़ाइलों को वितरित करने के लिए सलाह दी गई थी। हालांकि यह बहुत ही समान प्लेटफार्मों के लिए काम कर सकता है, मुझे कई मामलों में पाया गया है जहां यह काम नहीं करता है। उदाहरण के लिए, जब मैं मैक पर विकसित करता हूं जो एनाकोंडा पायथन का उपयोग करता है और परिणामी _pb2.py की प्रतिलिपि बनाता है, तो शेष परियोजना के साथ रास्पबेरी पाई रास्पियन पर चल रहा है, हमेशा _pb2.py मॉड्यूल से आने वाली आयात त्रुटियां होती हैं। हालांकि, अगर मैं पीआई पर ताज़ा रूप से .proto फ़ाइलों को संकलित करता हूं, तो परियोजना अपेक्षित काम करती है। इसलिए, संकलित फाइलों को वितरित करना एक विकल्प की तरह प्रतीत नहीं होता है।
यहां काम करने और सर्वोत्तम अभ्यास समाधान की तलाश करने की तरह। यह माना जा सकता है कि प्रोटोकॉल-कंपाइलर लक्ष्य मंच पर स्थापित है।
संपादित करें:
चूंकि लोग विफलता के कारण पूछते हैं। मैक पर, प्रोटोबफ संस्करण 2.6.1 है। और पीआई पर यह 2.4.1 है। जाहिर है, उत्पन्न प्रोटोकॉल संकलक आउटपुट द्वारा उपयोग की जाने वाली आंतरिक एपीआई बदल गई है। उत्पादन मूल रूप से है:
File "[...]network_manager.py", line 8, in <module>
import InstrumentControl.transports.serial_bridge_protocol_pb2 as protocol
File "[...]serial_bridge_protocol_pb2.py", line 9, in <module>
from google.protobuf import symbol_database as _symbol_database
ImportError: cannot import name symbol_database
मैं इसी तरह के मुद्दों था, और हमेशा पीआई पर संकलित। समस्या विभिन्न protobuf- संस्करणों से AFAIR उपजी है। तो - जो संस्करण आप संबंधित मशीनों पर की क्या ज़रूरत है, और आप एक ही करने के लिए उन्हें अपग्रेड नहीं कर सकते? – deets
मैं वास्तव में उससे बचना चाहता हूं। मैं (संभवतः) उन मशीनों पर कर सकता हूं जिन्हें मैं नियंत्रित करता हूं लेकिन यह ऐसा करने का सही तरीका नहीं लगता है। और यह दूसरों को सॉफ़्टवेयर वितरित करते समय शायद विफल हो जाता है। उन्हें प्रोटोकॉल बफर का एक विशिष्ट संस्करण स्थापित करना जब उनका वर्तमान संस्करण (पुन: संकलन करके) का उपयोग किया जा सकता है, सही नहीं लगता है। – jan
क्या आपने शोध किया - आयात त्रुटियों का क्या कारण बनता है? मैं पैकेजिंग _pb2.py फ़ाइलें रणनीति और आयात त्रुटि समस्याओं का शोध करना चुनूंगा। –